使用Forge进行AES加密/解密

3

我想使用javascript中的Forge库创建两个函数encrypt(message, key)和decrypt(ciphertext, key),但我不理解示例代码。

// generate a random key and IV
var key = forge.random.getBytesSync(16);
var iv = forge.random.getBytesSync(16);

// encrypt some bytes using CBC mode
// (other modes include: CFB, OFB, and CTR)
var cipher = forge.aes.createEncryptionCipher(key, 'CBC');
cipher.start(iv);
cipher.update(forge.util.createBuffer(someBytes));
cipher.finish();
var encrypted = cipher.output;
// outputs encrypted hex
console.log(encrypted.toHex());

// decrypt some bytes using CBC mode
// (other modes include: CFB, OFB, and CTR)
var cipher = forge.aes.createDecryptionCipher(key, 'CBC');
cipher.start(iv);
cipher.update(encrypted);
cipher.finish();
// outputs decrypted hex
console.log(cipher.output.toHex());

// generate a password-based 16-byte key
var salt = forge.random.getBytesSync(128);
var derivedKey = forge.pkcs5.pbkdf2('password', salt, numIterations, 16);

我应该在哪里使用自己的密钥? 在哪里可以选择256位模式? 你能给我一个更简单的例子吗?


您可以轻松地替换生成的密钥为自己的密钥,这个示例尽可能简单-它初始化了密码器,提交了输入数据并获取了输出数据。至于增加密钥长度(或使用其他密码模式),似乎您需要查看其他JS加密库 - Oleg Estekhin
只需使用一个长度为32字节的密钥即可使用AES-256。 - dlongley
1
为什么这个问题被投票否决了?密码学对于未经训练的人来说是一个复杂的主题。Forge是一个很好的库,但它的文档不像其他一些加密库那样易于访问,例如crypto-js - https://code.google.com/p/crypto-js/。 - arcseldon
对于低级示例,nodejs子文件夹包含一些很好的mocha单元测试覆盖率:https://github.com/digitalbazaar/forge/tree/master/nodejs/test - arcseldon
1个回答

2

我应该在哪里使用自己的密钥?

我没有使用过这个库,但它看起来非常简单直接。请看上面的这一部分:

// generate a random key and IV
var key = forge.random.getBytesSync(16);

并像这样放入您的密钥:

// generate a random key and IV
var key = neverGuessMahKeyIs1234;

如果您想要的话,对于iv也可以做同样的操作。

我在哪里可以选择256位模式?

首先,您正在处理密钥长度为所需大小的对称加密。因为它是对称的,所以用于加密和解密两端,这似乎就是您发布的代码所做的事情。我说“似乎”是因为我相信库的本机函数与您发布的函数相同。 因此,根据您发布的代码,似乎使用了128位(16 * 8 = 128)。如果您想要一个随机的256位,则只需使用:

var key = forge.random.getBytesSync(32);

或者只需创建一个256位长的自己的密钥。


再次强调,这就是CryptoJS的方便之处 - CryptoJS支持AES-128、AES-192和AES-256。它会根据您传入的密钥大小来选择变体。如果您使用口令短语,则它将生成一个256位的密钥。 - arcseldon
简要说明:Forge 还支持 AES-128、AES-192 和 AES-256,并且会根据您传入的密钥大小选择相应的变体。如果要使用基于密码的密钥,Forge 提供了相应的 API,例如 forge.pkcs5.pbkdf2。 - dlongley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接