gpt4 book ai didi

Java Blowfish 解密不返回原始字符串

转载 作者:行者123 更新时间:2023-12-01 19:07:02 26 4
gpt4 key购买 nike

我正在使用 Blowfish 实现一个简单的密码存储。一切都很好,直到我尝试了几种不同的密码/ key 组合,并遇到了许多解密值仍然是垃圾的情况。

下面是一个演示该问题的独立类。我得到以下输出:

'Aaaaaaa7' encrypted: 'r?—èLèdÓ,·Ã¸ÍÒ'*
'Aaaaaaa7' decrypted: 'ñü=€¼(T'*

知道我需要做什么来保证它始终正确解密。

(在JDK 1.6.0_26中使用jce.jar)

谢谢

大卫

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

public class BlowfishTwoWayHashImpl {

static {
test();
}

public static void test() {
String key = "wibble";

String passwordToEnrypt = "Aaaaaaa7";

String enc = BlowfishTwoWayHashImpl.encryptBlowfish(passwordToEnrypt, key);
System.out.println("'" + passwordToEnrypt + "' encrypted: '" + enc + "'");

String dec = BlowfishTwoWayHashImpl.decryptBlowfish(enc, key);
System.out.println("'" + passwordToEnrypt + "' decrypted: '" + dec + "'");
}


private static final String CIPHER_NAME = "Blowfish";

public static String encryptBlowfish(String toEncrypt, String key) {
return processString(toEncrypt, key, Cipher.ENCRYPT_MODE);
}

public static String decryptBlowfish(String toDecrypt, String key) {
return processString(toDecrypt, key, Cipher.DECRYPT_MODE);
}

private static String processString(String toEncrypt, String key, int encryptDecryptMode) {

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), CIPHER_NAME);

Cipher cipher;
try {
cipher = Cipher.getInstance(CIPHER_NAME);
cipher.init(encryptDecryptMode, secretKeySpec);
return new String(cipher.doFinal(toEncrypt.getBytes()));
}
catch (Exception e) {
throw new RuntimeException(e.toString());
}
}

}

最佳答案

不要这样做:

return new String(cipher.doFinal(toEncrypt.getBytes()));

您在代码中的所有地方都使用平台默认编码。 不要这样做。它将丢失数据。

当您将真实文本转换为字节(例如加密时)时,请使用特定的字符集 - UTF-8 是一个不错的选择。使用相同的字符集将“编码文本”解码为 String

当您将任意二进制数据转换为文本时,请使用 base64 编码,例如通过this public domain Base64 encoding library .

基本上,当您使用 String(byte[])String(byte[], String) 构造函数创建新字符串时,您是在说:“这是真正的文本数据 - 请仅将其解码为字符串。”当数据实际上是加密结果时,它不是文本数据......它是任意字节串。

关于Java Blowfish 解密不返回原始字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com