2017-11-07 13 views
0

私は、文字列を暗号化し、次のコードがあります。ノードv8.9.0エラー:無効なキーの長さcrypto.createCipheriv

var crypto   = require('crypto'), 
    algorithm  = 'aes-128-cbc', 
    key    = new Buffer('9vApxLk5G3PAsJrM', 'utf8'), 
    iv    = new Buffer('FnJL7EDzjqWjcaY9', 'utf8'); 

function encrypt(text, key){ 
    /* GET - crypted */ 
    try { 
     var cipher = crypto.createCipheriv(algorithm, key, iv), 
      crypted = cipher.update(text, 'utf8', 'hex'); 

     crypted += cipher.final('hex'); 
     return crypted; 
    } catch(e) { return console.log(e)} 
} 

console.log(encrypt('blablabla', key)) 

を、私はノードv8.9.0でこのコードを実行すると、私はこのエラーを取得:

Error: Invalid key length 
    at new Cipheriv (crypto.js:219:16) 
    at Object.Cipheriv (crypto.js:217:12) 

私は異なるキーと静脈の長さを試していますが、私はいつも同じエラーが発生します...だから、キーの長さを書く必要がありますか?

crypto.createCipherivを使用する必要があります.crypto.createCipherは、新しいノードのバージョンと新しいノードのバージョンでdepictingされるため、describe Developersはそのpreviusバ​​ージョンより20%高速です。

+0

コードに問題はありません。 Node @ 8.4.0で試してみました。開いている問題がないかどうかを見てきましたか?これはバグや互換性の破損のように見えます。 – Techniv

+0

okありがとう..iノードのセクションにこれを投稿しようとするかもしれません。おそらくノード8.9.0のバグです。テストのために – John

+0

ドキュメントに基づいて、 'createCipherv'も' utf-8'でエンコードされた文字列理論的には 'Buffer'は必要ないはずです。文字列を直接渡してみてください。 – James

答えて

0

私は、MySQLデータベースから古いキーを持っていることがわかりました。これはキーとして全面的に使用されていました。グローバルにキーが定義されているため、MySQLは古い暗号化キーを読み込み、20バイト長の古いMySQLデータベース暗号化キーを使用しています。 MySQLデータベースでUPDATEを使用すると、新しい16バイト長の暗号化キーが取得され、現在動作しています。

関連する問題