Java AES加密解密:deviceId和二维码密码

本文将介绍使用Java AES加密解密算法对deviceId和二维码密码进行加密和解密的示例代码。

加密方法

public static String encrypt(long id, String inputString){
    String salt = String.valueOf(System.currentTimeMillis());
    String combinedString = salt + ':' + id + ':' + inputString;

    IvParameterSpec iv = new IvParameterSpec(INIT_VECTOR.getBytes(StandardCharsets.UTF_8));
    SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), 'AES');

    Cipher cipher = null;
    try {
        cipher = Cipher.getInstance('AES/CBC/PKCS5PADDING');
    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
        return null;
    }
    try {
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
    } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
        return null;
    }

    byte[] encrypted = new byte[0];
    try {
        encrypted = cipher.doFinal(combinedString.getBytes());
    } catch (IllegalBlockSizeException | BadPaddingException e) {
        return null;
    }
    return Base64.getEncoder().encodeToString(encrypted);
}

解密方法

public static String decrypt(String encryptedString){
    byte[] encryptedData = Base64.getDecoder().decode(encryptedString);
    IvParameterSpec iv = new IvParameterSpec(INIT_VECTOR.getBytes(StandardCharsets.UTF_8));
    SecretKeySpec skeySpec = new SecretKeySpec(KEY.getBytes(StandardCharsets.UTF_8), 'AES');

    Cipher cipher = null;
    try {
        cipher = Cipher.getInstance('AES/CBC/PKCS5PADDING');
    } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
        return null;
    }
    try {
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
    } catch (InvalidKeyException | InvalidAlgorithmParameterException e) {
        return null;
    }

    byte[] decryptedData = new byte[0];
    try {
        decryptedData = cipher.doFinal(encryptedData);
    } catch (IllegalBlockSizeException | BadPaddingException e) {
        return null;
    }

    String decryptedString = new String(decryptedData);
    String[] parts = decryptedString.split(':');
    if(parts.length != 3){
        return null;
    }
    long id = Long.parseLong(parts[1]);
    String inputString = parts[2];
    return 'deviceId: ' + id + ', 二维码密码: ' + inputString;
}

解释

  1. 加密方法
    • 使用 System.currentTimeMillis() 获取当前时间戳作为salt,用于增加安全性。
    • 将salt、deviceId和二维码密码拼接成一个字符串,并使用AES算法进行加密。
    • 使用Base64编码加密后的字节数组,以便于传输和存储。
  2. 解密方法
    • 使用Base64解码加密后的字符串,获取字节数组。
    • 使用AES算法解密字节数组,得到原始的字符串。
    • 从解密后的字符串中提取deviceId和二维码密码。

注意

  • INIT_VECTORKEY 变量应设置为安全的值,并妥善保管。
  • 在实际应用中,建议使用更安全的加密算法和密钥管理机制。

使用

您可以使用上述解密方法来解密加密后的字符串,以获取deviceId和二维码密码。

例如,可以使用以下代码来解密一个加密后的字符串:

String encryptedString = '加密后的字符串';
String decryptedString = decrypt(encryptedString);
System.out.println(decryptedString); // 输出 deviceId 和 二维码密码
Java AES加密解密:deviceId和二维码密码

原文地址: https://www.cveoy.top/t/topic/wUJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录