私は、一般的な暗号を作成し、機能を解読している動作している私は、任意の文字列を提供しますが、私はsha256
ハッシュ文字列に渡そうとするときに暗号がエラーをスローした場合、それが正常に動作しますコードがある -Nodejs暗号解読が矛盾
let crypto = require('crypto');
const secret = new Buffer('1234567890abcdef71234567890abcdef1234567890abcdef1234567890abcdef', 'hex');
const iv = new Buffer('1234567890abcdef1234567890abcdef', 'hex');
const config = {
secret: secret,
iv: iv
};
function encrypt(data, sec, siv) {
let dataBuffer = ((data instanceof Buffer)?data:Buffer.from(data));
let cipher = crypto.createCipheriv('aes-256-cbc', sec, siv);
let crypt = cipher.update(dataBuffer);
crypt += cipher.final('hex');
return Buffer.from(crypt, 'hex');
}
function decrypt(data, sec, siv) {
let dataBuffer = ((data instanceof Buffer)?data:Buffer.from(data));
let decipher = crypto.createDecipheriv('aes-256-cbc', sec, siv);
let decrypt = decipher.update(dataBuffer);
decrypt += decipher.final();
return Buffer.from(decrypt);
}
function main() {
let test = 'asdfqwerty';
let secretBytes = crypto.randomBytes(32);
let secretHash = Buffer.from(crypto.createHmac('sha256', config.secret).update(secretBytes).digest('hex'));
console.log('\nTesting test string\n===================');
console.log(test);
a = encrypt(test, config.secret, config.iv);
console.log(decrypt(a, config.secret, config.iv).toString());
console.log('\nTesting test string\n===================');
console.log(secretHash);
a = encrypt(secretHash, config.secret, config.iv);
console.log(decrypt(a, config.secret, config.iv).toString());
}
try {
main();
} catch (e) {
console.log(e);
}
次のようにしかし、出力がある -
Testing test string
===================
asdfqwerty
asdfqwerty
Testing test string
===================
<Buffer 62 36 62 62 37 39 36 65 63 36 36 36 64 32 63 61 64 34 63 61 32 32 39 66 32 35 64 38 64 30 61 39 34 66 31 39 34 38 62 33 63 66 33 38 64 37 65 62 33 39 ... >
Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length
at Decipheriv.final (crypto.js:181:26)
at decrypt (/project/test2.js:24:23)
at main (/project/test2.js:43:15)
at Object.<anonymous> (/project/test2.js:47:3)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Function.Module.runMain (module.js:609:10)
それはで動作しますなぜ私が把握することはできません最初のテストケースはまだ2番目のテストケースで失敗します。ここで
は、いくつかの追加の研究の後、コード
'typeof data === 'Buffer''は決して真実ではありません。 'typeof'は' 'string''、' 'number''、' 'boolean''、' 'function''、' 'object''、' 'symbol''、' 'undefined''のみ生成します。おそらく 'Buffer.isBuffer(data)'を意味するでしょう。 – Ryan
あなたはとても正しいです。おかげさまで、私はスーパーベーシックであることが分かっているものに私の心を失いつつあると思っていました。私は 'typeof'をテストするために' instancesof'を使うべきです。しかし、これは基本的な問題を解決するものではありません。なぜなら暗号方式はバッファや文字列で動作するはずだからです – JayReardon