Base64转16进制工具--HexUtil--密钥加密

源码如下:

package com.rural_vibration.common.utils;

import java.util.Base64;

/**
 * @description: base64转16进制 <br>
 * @date: 2024/01/29 16:30 <br>
 * @author: Dongjie Wang <br>
 * @version: 1.0 <br>
 */
public class HexUtil {


    /**
     * @param value base64处理过的密码 / 公钥 / 私钥 等
     * @return
     */
    public static String stringToHexString(String value) {
        byte[] keyBytes = Base64.getDecoder().decode(value);
        //在多线程时使用 StringBuffer
        StringBuilder builder = new StringBuilder(keyBytes.length);
        String sTemp;
        for (int i = 0; i < keyBytes.length; i++) {
            sTemp = Integer.toHexString(0xFF & keyBytes[i]);
            if (sTemp.length() < 2) {
                builder.append(0);
            }
            builder.append(sTemp.toUpperCase());
        }
        return builder.toString();
    }

    /**
     * 测试用例
     */
    public static void main(String[] args) {
        //Base64处理后的RSA公钥 转16进制
        System.out.println(HexUtil.stringToHexString("TUZ3d0RRWUpLb1pJaHZjTkFRRUJCUUFEU3dBd1NBSkJBTlBadDJTRXBXeDRGT05RbzN6MGhFQ0xZR1orNDNvaCUwQVQrb3dwM3Q0aTl0YWkybldBd3R5eTVLZEFiSnRUZWNDUDVrZWdCYkVoUDRYMVNnMGdCeFpGV1VDQXdFQUFRJTNEJTNE"));
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 javax.crypto 库中的 DES 算法来实现这个需求。下面是一个示例代码: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.nio.charset.StandardCharsets; import java.util.Base64; public class DESExample { public static void main(String[] args) throws Exception { String plainText = "Hello, World!"; // 待加密的数据 String keyHex = "0123456789ABCDEF"; // 16进制密钥,长度为8字节(16个字符) byte[] keyBytes = hexStringToByteArray(keyHex); byte[] plaintextBytes = plainText.getBytes(StandardCharsets.UTF_8); // 创建DESKeySpec对象 DESKeySpec desKeySpec = new DESKeySpec(keyBytes); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey secretKey = keyFactory.generateSecret(desKeySpec); // 创建Cipher对象并进行加密 Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plaintextBytes); // 将加密后的字节数组16进制字符串 String encryptedHex = byteArrayToHexString(encryptedBytes); System.out.println("Encrypted Hex: " + encryptedHex); } // 将16进制字符串为字节数组 public static byte[] hexStringToByteArray(String hexString) { int len = hexString.length(); byte[] byteArray = new byte[len / 2]; for (int i = 0; i < len; i += 2) { byteArray[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16)); } return byteArray; } // 将字节数组16进制字符串 public static String byteArrayToHexString(byte[] byteArray) { StringBuilder hexString = new StringBuilder(); for (byte b : byteArray) { String hex = Integer.toHexString(0xFF & b); if (hex.length() == 1) { hexString.append('0'); } hexString.append(hex); } return hexString.toString(); } } ``` 以上代码使用了 DES/ECB/NoPadding 模式进行加密密钥长度为8字节(16个字符)。加密后的数据以16进制字符串形式打印输出。 请注意,DES算法已经被认为是不安全的,不推荐在实际应用中使用。如果需要更高的安全性,建议使用AES算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值