2014-04-26 175 views
1

我想在javascript中使用Forge库创建两个函数encrypt(message,key)和decrypt(ciphertext,key),但我不想看看示例代码。使用Forge来加密/解密AES

// 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位模式? 你能给我一个更简单的例子吗?

+0

你可以很容易地用你自己的密钥代替生成的密钥,这个例子尽可能小 - 它初始化密码,提交输入数据并获得输出数据。至于增加密钥长度(或使用其他密码模式),似乎你将不得不看看其他[js加密库](http://stackoverflow.com/questions/793812/javascript-aes-encryption)。 –

+0

只需使用长度为32个字节的密钥即可使用AES-256。 – dlongley

+0

为什么这个问题被拒绝?密码学是一门复杂的学科,尤其对于外行人来说更是如此。 Forge是一个很好的lib,但其文档不像其他一些加密库那么容易访问 - 例如crypto-js - https://code.google.com/p/crypto-js/ – arcseldon

回答

1

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

我还没有使用过这个库,但它看起来很直截了当。在顶部取出这一部分:

// 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位。

+0

再次,这是crypto-js非常方便的地方 - CryptoJS支持AES-128,AES-192,和AES-256。它会根据您传入的密钥大小来选择变体。如果使用密码短语,则会生成一个256位密钥。 – arcseldon

+0

只是一个简短的提示:伪造也支持AES-128,AES-192和AES-256,并将根据您传入的密钥大小选择变体。如果要使用密码派生密钥,伪造提供这些API,如forge.pkcs5.pbkdf2。 – dlongley