我想使用 Forge 创建两个函数 encrypt(message, key) 和 decrypt(ciphertext, key) javascript 中的库,但我不理解示例代码。
// 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);
我应该在哪里使用我自己的 key ? 我在哪里可以选择 256 位模式? 你能给我一个更简单的例子吗?
最佳答案
Where should I use my own key?
我没有使用过那个库,但它看起来很简单。将这部分放在顶部:
// generate a random key and IV
var key = forge.random.getBytesSync(16);
然后像这样输入你的 key :
// generate a random key and IV
var key = neverGuessMahKeyIs1234;
如果需要,对 iv
执行相同的操作。
Where can I choose 256 bit mode?
好的,所以首先要处理对称加密,它具有所需大小的 key 长度。因为它是对称的,所以它用于加密和解密端,这就是您发布的代码似乎所做的。我说“似乎”是因为我相信图书馆的 native 功能与您发布的一样。 因此,您发布的代码似乎使用(如我上面所示)128 位 (16*8=128)。如果你想要一个随机的 256,那么只需使用:
var key = forge.random.getBytesSync(32);
或者自己制作 256 位长的 key 。
关于javascript - 使用 Forge 加密/解密 AES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317020/