要实现每次返回的加密字符串都不同,可以引入一个随机因子来增加加密的随机性。可以将随机因子作为一个额外的参数传入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);
}

每次运行都会生成不同的加密字符串,且可以成功解密。

public static String encryptlong id String inputString String idString = StringvalueOfid; StringBuilder encryptedString = new StringBuilder; 遍历字符串的每个字符 for int i = 0; i

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

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