1

メッセージ文字列を定期的に復号化しています。複数の jsperf を調べた後、forge と stanford が cryptojs よりも高速であることに気付きました。古いモバイル デバイスをサポートする必要があるため、その余分な速度が必要なので、移行を試みています。

動作する crpto-js コードは次のとおりです。

var feed = message.data.msg;
var iv = CryptoJS.enc.Hex.parse(_iv);
var key = CryptoJS.enc.Hex.parse(_key);

var decrypted = CryptoJS.AES.decrypt(feed.substr(32), key, { iv: iv });
feed = decrypted.toString(CryptoJS.enc.Utf8);

そして今、非動作の鍛造コード:

var feed = message.data.msg;
var iv = forge.util.hexToBytes(_iv);
var key = forge.util.hexToBytes(_key);

var buffer = forge.util.createBuffer( feed.substr(32) );
var cipher = forge.aes.createDecryptionCipher(key);

cipher.start( iv );
cipher.update( buffer );
cipher.finish();

feed = cipher.output.toHex();

forge で復号化した後、ランダムな文字の寄せ集めが表示されます。コードをステップ実行する際に注目すべき唯一の点は、forge/aes.js の 969 行目の失敗です。

if(count > (Nb << 2)) {
    rval = false;
}

起動して false を返します。

両方のライブラリが AES のデフォルトとして CBC を使用しているため、ここで途方に暮れているため、すべてが機能するはずです。

4

1 に答える 1

2

変更してみましたか:

var buffer = forge.util.createBuffer( feed.substr(32) );

に:

var buffer = forge.util.createBuffer( forge.util.decode64( feed.substr(32) ) );

そして変更:

feed = cipher.output.toHex();

に:

feed = cipher.output.getBytes();
于 2013-10-02T21:01:08.557 に答える