2017-06-08 8 views
1

暗号化するためにcrypto js tripleDESを使用すると、暗号化する文字列の長さがすべて「01」、「111」、 5000021234567890000 "、出力が正しくないか、私が期待している値ではありません。 は、例えば、この"5000021234567890000"のために、私はこれを期待しています:"HctDaKc/U9avOwZMSS5mEi62kfojDHA4"を私が代わりにこれを取得:HctDaKc/U9bNnFy6eZHqHj3SemorJxQMCrypto JS:TripleDESが適切に暗号化されていない

これは私が見つけたコードであると

let key = CryptoJS.MD5(enckey); 
key.words[4] = key.words[0]; 
key.words[5] = key.words[1]; 
let iv = CryptoJS.lib.WordArray.create(64/8); 
CryptoJS.TripleDES.encrypt("5000021234567890000", key, {iv: iv}); 

を暗号化するために使用してあなたの助けが非常に高く評価されるだろう。

+0

が、それはもはや安全であると考えられ、代わりに使用AES(高度暗号化規格) 。 – zaph

+0

ありがとうございますが、私は暗号化方式を変更する権限がありません。私は単純に要件を満たしています –

+0

ちょっとしたコードを考えてみましょう:1つのインスタンスがCBCモードを使用していて、もう1つがECBモードを使用しています。モード。明示的に暗号化モードを提供する方が常に良いです。また、ほとんどの状況で廃止予定の2キー3DESを使用しているようです。 – zaph

答えて

2

暗号化されたデータを見ると、最初のブロックは一致し、次の2ブロックは一致しません。

 
    HctDaKc/U9avOwZMSS5mEi62kfojDHA4 
    1DCB4368A73F53D6 AF3B064C492E6612 2EB691FA230C7038 

    HctDaKc/U9bNnFy6eZHqHj3SemorJxQM 
    1DCB4368A73F53D6 CD9C5CBA7991EA1E 3DD27A6A2B27140C 

IVはおそらくすべて0x00バイトです。

これは、ECB modeを使用していることと、もう1つがCBCモードを使用していることを示しています。

Block cipher mode of operation、特にECBとCBCモードを参照してください。

ECBモードでは、各ブロックが独立して暗号化され、CBCモードでは暗号化されるデータで前のブロックが暗号化され、最初のブロックではIVが暗号化されます。 IVはすべて0x00の値なので、最初のブロックは変更されません。

オプションは、暗号化装置の作成で指定することができます。ドキュメントページを参照する必要があります。幸いです。

それは次のようになります。

encryptor = crypto.createCipheriv(mode, key, iv) 
モードの一つである

'des-ede', 'des-ede-cbc', 'des-ede3', 'des-ede3-cbc', 'des3'

新しい仕事のために3DESを使用しないでください
+0

ありがとう、 –

関連する問題