1

Node.jsは、16進数でエンコードされたAES128出力を復号化するときに、奇妙なことに間違った出力を表示します。

function decrypt_data( data, key, iv )
{
    var dc = crypto.createDecipheriv( 'aes-128-cbc', hex_to_str(key), hex_to_str(iv) );
    var res = dc.update( data, 'hex', 'utf8' );
    res += dc.final( 'utf8' );

    console.log(res);

    return res;
}

この関数は完全に問題ないようです。すべてのテストに合格しています。しかし、実際のノードサーバーから呼び出すと、破損した出力が返されます。

メッセージの末尾は問題ありませんが、最初の32個のシンボルは完全にゴミです。このようなもの:

�8���ro�&����AMD Accelerated Parallel Processing" : [ "Cayman", "Cayman", "AMD Phenom(tm) II X2 555 Processor" ] }, "request" : "hello", "version" : 1 }

どの入力を使用しても、最初の32バイトの戻り値は常に間違っています。

4

1 に答える 1

2

コードはCBCモードを使用しています。このモードでは、出力の最初のチャンクの破損は、多くの場合、間違ったIVを使用することによって引き起こされる可能性があります。暗号化と復号化にまったく同じIVを使用していることを注意深く確認してください。つまり、バイトごとにチェックするということです。

于 2011-08-24T15:23:17.183 に答える