2017-05-04 17 views
0

私はnode.jsで暗号化しようとしましたが、ひどくオンラインサイトと同じ結果を得られません。node.jsのaes-ecbでバイナリデータを暗号化する

いくつかのバイナリデータをバイナリキーで暗号化したいとします。 nodejs siteのチュートリアルを使用しますが、参照データセットとは異なる結果があります。 私の参照データセットは、Cコードとし、2つのオンラインサイトで、Javaコードで検証されています http://aes.online-domain-tools.com/https://www.hanewin.net/encrypt/aes/aes-test.htm

はあなたにそれらのサイトと同じように暗号化する方法のアイデアをお持ちですか? 私はそれがパディングかもしれないと思いますか?

ありがとうございます。 フランソワ

私の参照データセット:

key=8CBDEC62EB4DCA778F842B02503011B2 
    src=0002123401010100000000000000c631 
    encrypted=3edde3f1368328a1a37cf596bc8d4a7c 

マイコード:

var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex') 
    var src = new Buffer('0002123401010100000000000000c631', 'hex') 
    cipher = crypto.createCipher("aes-128-ecb", key) 
    result = cipher.update(src).toString('hex'); 
    result += cipher.final().toString('hex'); 
    "result : " + result 

出力:

result : 4da42b57b99320067979086700651050e972f1febd1d506e5c90d3b5d3bc9424 
+1

'crypto.createCipher'を' crypto.createCipheriv'に変更し、空のIV( '" '')を渡します。また、パディングを無効にすることもできます。 –

+0

** [ECBモード](https://crypto.stackexchange.com/q/14487/13022)**は絶対に使用しないでください。それは決定論的であり、したがって意味的に安全ではありません。最低でも[CBC](https://crypto.stackexchange.com/q/22260/13022)や[CTR](https://crypto.stackexchange.com/a/2378/)のようなランダム化モードを使用する必要があります13022)。 [パディング・オラクル攻撃](https://crypto.stackexchange.com/q/18185/13022)のような攻撃が不可能になるように、暗号文を認証する方が良いです。これは、GCMやEAXのような認証されたモード、または[encrypt-then-MAC](https://crypto.stackexchange.com/q/202/13022)スキームで行うことができます。 –

答えて

0

あなたArtjom B.

をありがとう、私はhereuを投稿復号化するために

var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex') 
var src = new Buffer('0002123401010100000000000000c631', 'hex') 
cipher = crypto.createCipheriv("aes-128-ecb", key, '') 
cipher.setAutoPadding(false) 
result = cipher.update(src).toString('hex'); 
result += cipher.final().toString('hex'); 
"result : " + result 

、同じ操作を行います。:固定コードNDER

var key = new Buffer('8CBDEC62EB4DCA778F842B02503011B2', 'hex') 
var encrypted = new Buffer('3edde3f1368328a1a37cf596bc8d4a7c', 'hex') 
decipher = crypto.createDecipheriv("aes-128-ecb", key, '') 
decipher.setAutoPadding(false) 
result = decipher.update(encrypted).toString('hex'); 
result += decipher.final().toString('hex'); 
"result : " + result 

おかげで、私は心から感謝しています。 よろしくお願いします。フランチャイズ

+1

暗号化するデータが常に128バイトのブロックサイズの倍数でない場合は、パディングが必要であることに注意してください。また、ECBモードは安全ではありません。[ECBモード](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)を参照して、ペンギンまでスクロールしてください。 CBCモードをランダムIVで使用し、暗号化されたデータにIVを付加して復号化に使用するだけで、秘密にする必要はありません。 – zaph

関連する問題