Java AES加密解密:deviceId和二维码密码
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;
}
解释
- 加密方法:
- 使用
System.currentTimeMillis()获取当前时间戳作为salt,用于增加安全性。 - 将salt、deviceId和二维码密码拼接成一个字符串,并使用AES算法进行加密。
- 使用Base64编码加密后的字节数组,以便于传输和存储。
- 使用
- 解密方法:
- 使用Base64解码加密后的字符串,获取字节数组。
- 使用AES算法解密字节数组,得到原始的字符串。
- 从解密后的字符串中提取deviceId和二维码密码。
注意
INIT_VECTOR和KEY变量应设置为安全的值,并妥善保管。- 在实际应用中,建议使用更安全的加密算法和密钥管理机制。
使用
您可以使用上述解密方法来解密加密后的字符串,以获取deviceId和二维码密码。
例如,可以使用以下代码来解密一个加密后的字符串:
String encryptedString = '加密后的字符串';
String decryptedString = decrypt(encryptedString);
System.out.println(decryptedString); // 输出 deviceId 和 二维码密码
原文地址: https://www.cveoy.top/t/topic/wUJ 著作权归作者所有。请勿转载和采集!