【发布时间】:2017-03-04 06:59:39
【问题描述】:
我不能更改密钥或 IV,只有在这种情况下,加密在 Java 和 Linux 中才有效。
Linux:
echo -n 1234567890ABCDEF| openssl enc -bf-cbc -K 0 -iv 0 -nopad -nosalt |base64
Java
byte[] key = {0};
byte[] iv = {0, 0, 0, 0, 0, 0, 0, 0};
Cipher c = Cipher.getInstance("BlowFish/CBC/NoPadding");
Key k = new SecretKeySpec(key, "BlowFish");
c.init(Cipher.ENCRYPT_MODE, k, new IvParameterSpec(iv));
byte[] encrypt = c.doFinal("1234567890ABCDEF".getBytes("UTF-8"));
System.out.println(new String(Base64.encodeBase64(encrypt)));
如何更改 Key 和 IV 以使两者都继续等于?
【问题讨论】:
-
那么,您在 Java 方面遇到的异常是什么?我认为应该足够精确地告诉您密钥必须有多长。
-
BlowFish 真的不应该在新作品中使用,即使作者使用 AES。您应该使用随机 IV,只需在加密数据前面加上它,以便在解密期间使用。如果您不使用填充,则要加密的输入长度必须是块大小的精确倍数,您可能需要使用 PKCS#5 填充。您正在为安全性进行加密,对吗?
-
我相信你在
EVP_BytesToKey上被绊倒了。另见Java openssl encryption / decryption key generation、Java equivalent of an OpenSSL AES CBC encryption 和朋友。一旦您知道要查找的内容,您就可以在整个网络上找到它。
标签: java linux encryption openssl