【问题标题】:Decipher of Hex-String with aes-128-cbc and IV用 aes-128-cbc 和 IV 解密十六进制字符串
【发布时间】:2020-11-13 14:16:57
【问题描述】:

我正在使用以下代码,试图破译十六进制消息“EF963FF7828658A599F3041510671E88”,十六进制密钥为“000000000000000000000000000000000”,同样为“000000000000000000000”

const crypto = require('crypto');

function decrypt(messageHex, keyHex, ivHex) {
    const key = Buffer.from(keyHex, 'hex');
    const iv = Buffer.from(ivHex, 'hex');

    const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
    let decrypted = decipher.update(messageHex, 'hex');
    decrypted += decipher.final();
    return decrypted;
}

const decryptedCipherText = decrypt(
    'EF963FF7828658A599F3041510671E88',
    '00000000000000000000000000000000',
    '00000000000000000000000000000000',
);

console.log('Decoded Ciphertext: ' + decryptedCipherText);

我收到此错误:

internal/crypto/cipher.js:170
  const ret = this[kHandle].final();
                            ^

Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
    at Decipheriv.final (internal/crypto/cipher.js:170:29)
    at decrypt (/Users/manuelmertl/workspace/coaaas/ntag/index3.js:9:27)
    at Object.<anonymous> (/Users/manuelmertl/workspace/coaaas/ntag/index3.js:13:27)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32)
    at Function.Module._load (internal/modules/cjs/loader.js:723:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
  library: 'digital envelope routines',
  function: 'EVP_DecryptFinal_ex',
  reason: 'bad decrypt',
  code: 'ERR_OSSL_EVP_BAD_DECRYPT'
}

虽然我期待解密函数的返回值:

C704DE5F1EACC0403D0000DA5CF60941

我的错误在哪里?

谢谢你:)

【问题讨论】:

  • 必须禁用填充:decipher.setAutoPadding(false);。此外,update(第三个参数)和final(第一个参数)的输出编码必须设置为hex
  • 谢谢你,@Topaco - 它就是这样工作的。我将在上面发布我更新的代码。谢谢:)

标签: node.js cryptography hex


【解决方案1】:

基于@Topaco 评论反馈的解决方案:

var crypto = require('crypto');

function decrypt(message, keyHex, ivHex) {
    const key = Buffer.from(keyHex, 'hex');
    const iv = Buffer.from(ivHex, 'hex');

    const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
    decipher.setAutoPadding(false);
    let decrypted = decipher.update(message, 'hex', 'hex');
    decrypted += decipher.final('hex');
    return decrypted;
}

var decryptedCipherText = decrypt(
    'EF963FF7828658A599F3041510671E88',
    '00000000000000000000000000000000',
    '00000000000000000000000000000000',
);

console.log('Decoded Ciphertext: ' + decryptedCipherText);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多