Java和Linux中的加密不匹配

Java和Linux中的加密不匹配,java,linux,encryption,openssl,Java,Linux,Encryption,Openssl,我不能更改密钥或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");

我不能更改密钥或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)));
如何更改键和IV,使两者继续相等?

阅读:

所有分组密码通常使用PKCS#5填充也称为标准分组填充

由于Java代码表示
NoPadding
,因此需要添加一个额外的参数:

阅读:

所有分组密码通常使用PKCS#5填充也称为标准分组填充

由于Java代码表示
NoPadding
,因此需要添加一个额外的参数:


那么,在Java方面有什么例外呢?我认为它应该足够精确地告诉你钥匙必须有多长。河豚真的不应该在新作品中使用,即使作者使用AES。您应该使用random IV,只是在加密数据前面加上前缀,以便在解密过程中使用。如果不使用填充,则要加密的输入长度必须是块大小的精确倍数,可能需要使用PKCS#5填充。你在做加密是为了安全,对吧?我相信你被绊倒了。也看到了,朋友们。一旦你知道要寻找什么,你就可以在网络上找到它。那么,在Java方面有什么例外呢?我认为它应该足够精确地告诉你钥匙必须有多长。河豚真的不应该在新作品中使用,即使作者使用AES。您应该使用random IV,只是在加密数据前面加上前缀,以便在解密过程中使用。如果不使用填充,则要加密的输入长度必须是块大小的精确倍数,可能需要使用PKCS#5填充。你在做加密是为了安全,对吧?我相信你被绊倒了。也看到了,朋友们。一旦你知道要找什么,你可以在网上找到。对不起,我忘了写“-nopad”。因此,如果我尝试更改IV或键入结果不匹配,情况就是这样对不起,我忘了写“-nopad”。因此,如果我尝试更改IV或键,则结果不匹配
-nopad
     disable standard block padding