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;
}

原理

  1. 异或运算: 异或运算的特性是:相同为0,不同为1。因此,使用同一个随机因子和id对字符进行两次异或运算,可以还原原始字符。
  2. 随机因子: 在加密过程中,每次生成一个不同的随机因子,并将其与加密后的字符串一起存储,以保证每次加密结果都不同。
  3. Base64编码: 使用Base64编码可以将二进制数据转换为可打印的字符串,方便传输和存储。

注意事项

  • 该加密算法比较简单,安全性较低。如果需要更安全的加密,可以使用更复杂的算法,例如AES或RSA。
  • 在实际应用中,建议使用更安全的随机数生成器,例如SecureRandom
  • 随机因子的存储方式需要考虑安全性,避免被恶意攻击者获取。

总结

本算法实现了一种简单的字符串加密解密方案,能够保证每次加密结果都不同。但需要注意,该算法安全性较低,仅供学习和参考。在实际应用中,建议使用更安全的加密算法。

Java 字符串加密解密算法实现:保证每次加密结果都不同

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

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