【问题标题】:aes-256-cbc encryption and decryptionaes-256-cbc加解密
【发布时间】:2015-11-24 07:59:31
【问题描述】:

我正在使用 node.js 中的crypto npm 模块加密 音频 文件,并尝试在 解密 android端使用相同的算法和密钥。

加密代码是:

加密参数

var crypto = require('crypto'),
    algorithm = 'aes-256-cbc',
    password = 'somepassword';  //encyption parameters

加密函数

function encrypt(buffer) {
    var cipher = crypto.createCipher(algorithm, password);
    var crypted = Buffer.concat([cipher.update(buffer), cipher.final()]);
    return crypted;
}

现在,对于 Decryption ,我们需要使用一些 IV(Initialisation Vector),正如研究表明 not to use same IV for any two files

所以,我现在只想知道如何设置自定义 IV,以及如何在 node.js 中使用加密或任何方式为每个文件生成随机或单独的 IV加密期间的其他模块。

如果有人能在这方面帮助我,那就太好了。

【问题讨论】:

  • 如果您使用的是真实密码(字符少,字符集有限),那么您不应该使用这个 node.js 代码。这确实会调用 MD5 从不够安全的密码中生成密钥。您应该使用 PBKDF2 从具有随机盐和多次迭代(超过 9.000)的密码中派生密钥。然后你还需要生成一个随机 IV。
  • 谢谢@ArtjomB。如果您能解释得更多,以便更好、更清楚地理解它,那将会更有帮助。

标签: android node.js encryption cryptography aes


【解决方案1】:

要创建 IV,请使用以下命令获取 16 个随机字节:

var iv = crypto.randomBytes(16)

然后,在创建密码时,更改

var cipher = crypto.createCipher(algorithm, password);

var cipher = crypto.createCipheriv(algorithm, password, iv);

生成的密文不会附加IV,所以需要单独发送到android端(可以明文发送)。

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 1970-01-01
    • 2017-09-28
    • 2015-08-22
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2021-04-22
    相关资源
    最近更新 更多