Bre*_*dly 3 cryptography node.js
pbkdf2var key = crypto.pbkdf2Sync('prancypoodle', 'sherylcrowe', 10000, 32, 'sha512');
Run Code Online (Sandbox Code Playgroud)
用密码创建一个密钥prancy poodle,然后用盐腌sherylcrowe,迭代10,000次,放出一个32字节长的密钥(AES-256-CBC需要该长度)。
var cipher = crypto.createCipheriv('aes-256-cbc', key, 'dogsarefun'.toString("binary"));
var crypted = cipher.update('wherearemysocks?');
crypted = Buffer.concat([crypted, cipher.final()]);
Run Code Online (Sandbox Code Playgroud)
var decipher = crypto.createDecipheriv('aes-256-cbc', key, 'dogsarefun'.toString('binary'));
var decrypted = decipher.update(crypted);
decrypted = Buffer.concat([decrypted, decipher.final()]);
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
at Error (native)
at Decipher.Cipher.final (crypto.js:150:26)
at repl:1:48
at REPLServer.defaultEval (repl.js:272:27)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:441:10)
at emitOne (events.js:101:20)
at REPLServer.emit (events.js:188:7)
at REPLServer.Interface._onLine (readline.js:219:10)
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?看起来似乎是正确的,但却是错误的。
您需要为CBC模式提供一个IV,并且必须为块大小(对于AES为16字节)。“ dogsarefun”只有10个字节,因此剩余字节未指定,并且可能(可能是)垃圾。
由于默认为PKCS填充,而使用的是CBC模式,因此错误的IV可能导致解密时填充错误,并可能出现以下错误:例程:EVP_DecryptFinal_ex:错误的解密。
PS注意:这是猫所伪装的互联网。
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |