2016-10-21 17 views
0

キーまたはIVは変更できません。この場合のみ、暗号化はJavaおよびLinuxで機能します。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を変更する方法

ので、両方が等号を続けますか?

+0

Java側ではどういう例外がありますか?鍵がどれくらい長くなければならないかを教えてくれるほど正確でなければならないと思います。 –

+1

BlowFishは新作では使用しないでください。作者でもAESを使用しています。ランダムIVを使用して、暗号化されたデータの前にプレフィックスを付加して、復号化の際に使用してください。パディングを使用しない場合は、暗号化するimputの長さをブロックサイズの倍数にする必要があります。PKCS#5パディングを使用する必要があります。あなたはセキュリティのために暗号化を行っていますよね? – zaph

+0

私は、あなたが['EVP_BytesToKey'](https://www.openssl.org/docs/manmaster/crypto/EVP_BytesToKey.html)に乗っていると信じています。また、[Java openssl暗号化/復号鍵の生成](http://stackoverflow.com/q/34502705)、[OpenSSL AES CBC暗号化のJava同等物](http://stackoverflow.com/q/32508961)およびフレンド。探しているものが分かれば、ウェブ全体で見つけることができます。 – jww

答えて

1

documentationを読む:

すべてのブロック暗号は、通常、JavaコードがNoPadding言うので、あなたがしたいと思いますまた、標準ブロックパディングとして知らPKCS#5のパディング

を使用余分な引数を追加してください:

-nopad 
    disable standard block padding 
+0

申し訳ありません、 "-nopad"と書いています。これは、私がIVまたはKeyを変更しようとすると結果が一致しない場合です – Wender

関連する問題