Java 字符串加密解密算法实现:保证每次加密结果都不同
Java 字符串加密解密算法实现:保证每次加密结果都不同
本文介绍一种简单的字符串加密解密算法,它使用异或运算和随机因子,能够保证每次加密的结果都不同,即使输入参数相同。
加密方法
public static String encrypt(long id, String inputString) {
String idString = String.valueOf(id);
StringBuilder encryptedString = new StringBuilder();
// 生成随机因子
long randomFactor = System.currentTimeMillis();
// 遍历字符串的每个字符
for (int i = 0; i < inputString.length(); i++) {
char c = inputString.charAt(i);
// 将字符与id字符串的对应字符和随机因子进行异或运算
char encryptedChar = (char) (c ^ idString.charAt(i % idString.length()) ^ randomFactor);
// 将异或运算后的字符加入到加密字符串中
encryptedString.append(encryptedChar);
}
// 将id、随机因子和加密字符串进行拼接
String combinedString = id + ':' + randomFactor + ':' + encryptedString.toString();
// 使用Base64编码加密字符串,得到最终加密结果
return Base64.getEncoder().encodeToString(combinedString.getBytes());
}
解密方法
public static DeviceEntity decrypt(String encryptedString) {
// 使用Base64解码加密字符串
byte[] decodedBytes = Base64.getDecoder().decode(encryptedString);
String combinedString = new String(decodedBytes);
// 分割id和加密字符串
String[] parts = combinedString.split(':');
long id = Long.parseLong(parts[0]);
long randomFactor = Long.parseLong(parts[1]);
String encryptedContent = parts[2];
StringBuilder decryptedString = new StringBuilder();
// 遍历加密字符串的每个字符
for (int i = 0; i < encryptedContent.length(); i++) {
char c = encryptedContent.charAt(i);
// 将字符与id字符串的对应字符和随机因子进行异或运算,得到解密后的字符
char decryptedChar = (char) (c ^ String.valueOf(id).charAt(i % String.valueOf(id).length()) ^ randomFactor);
// 将解密后的字符加入到解密字符串中
decryptedString.append(decryptedChar);
}
// 返回解密结果
DeviceEntity deviceEntity = new DeviceEntity();
deviceEntity.setDeviceId(id);
deviceEntity.setQrCode(decryptedString.toString());
return deviceEntity;
}
原理
- 异或运算: 异或运算的特性是:相同为0,不同为1。因此,使用同一个随机因子和id对字符进行两次异或运算,可以还原原始字符。
- 随机因子: 在加密过程中,每次生成一个不同的随机因子,并将其与加密后的字符串一起存储,以保证每次加密结果都不同。
- Base64编码: 使用Base64编码可以将二进制数据转换为可打印的字符串,方便传输和存储。
注意事项
- 该加密算法比较简单,安全性较低。如果需要更安全的加密,可以使用更复杂的算法,例如AES或RSA。
- 在实际应用中,建议使用更安全的随机数生成器,例如
SecureRandom。 - 随机因子的存储方式需要考虑安全性,避免被恶意攻击者获取。
总结
本算法实现了一种简单的字符串加密解密方案,能够保证每次加密结果都不同。但需要注意,该算法安全性较低,仅供学习和参考。在实际应用中,建议使用更安全的加密算法。
原文地址: http://www.cveoy.top/t/topic/ddYz 著作权归作者所有。请勿转载和采集!