public static String encryptlong id String inputString String idString = StringvalueOfid; StringBuilder encryptedString = new StringBuilder; 遍历字符串的每个字符 for int i = 0; i
要实现每次返回的加密字符串都不同,可以引入一个随机因子来增加加密的随机性。可以将随机因子作为一个额外的参数传入encrypt方法中。
以下是修改后的encrypt方法:
public static String encrypt(long id, String inputString, long randomFactor) {
String idString = String.valueOf(id);
StringBuilder encryptedString = new StringBuilder();
// 遍历字符串的每个字符
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());
}
为了实现解密方法,首先需要解码Base64加密后的字符串。然后,根据冒号分隔符将解码后的字符串拆分为id、随机因子和加密字符串。最后,可以使用相同的逻辑对加密字符串进行解密。
以下是解密方法的实现:
public static String decrypt(String encryptedString) {
// 解码加密后的字符串
byte[] decodedBytes = Base64.getDecoder().decode(encryptedString);
// 将解码后的字节数组转换为字符串
String decodedString = new String(decodedBytes);
// 根据冒号分隔符将解码后的字符串拆分为id、随机因子和加密字符串
String[] parts = decodedString.split(":");
// 获取id、随机因子和加密字符串
long id = Long.parseLong(parts[0]);
long randomFactor = Long.parseLong(parts[1]);
String encryptedString = parts[2];
// 解密加密字符串
String idString = String.valueOf(id);
StringBuilder decryptedString = new StringBuilder();
for (int i = 0; i < encryptedString.length(); i++) {
char encryptedChar = encryptedString.charAt(i);
// 将加密字符与id字符串的对应字符和随机因子进行异或运算
char decryptedChar = (char) (encryptedChar ^ idString.charAt(i % idString.length()) ^ randomFactor);
// 将异或运算后的字符加入到解密字符串中
decryptedString.append(decryptedChar);
}
return decryptedString.toString();
}
使用示例:
public static void main(String[] args) {
long id = 12345;
String inputString = "Hello, world!";
long randomFactor = System.currentTimeMillis(); // 使用当前时间作为随机因子
String encryptedString = encrypt(id, inputString, randomFactor);
System.out.println("Encrypted string: " + encryptedString);
String decryptedString = decrypt(encryptedString);
System.out.println("Decrypted string: " + decryptedString);
}
每次运行都会生成不同的加密字符串,且可以成功解密。
原文地址: https://www.cveoy.top/t/topic/jf2A 著作权归作者所有。请勿转载和采集!