1

我正在使用SJCL 库来加密/解密消息。我的问题是我不知道使用的是 AES 还是 SHA256

这是我的代码:

var h = sjcl.codec.hex, count = 2048 ;
salt = h.fromBits(sjcl.random.randomWords('10','0'));
var key = h.fromBits( sjcl.misc.pbkdf2(somePassword, h.toBits(salt), count) ) ;

接下来我可以像这样加密/解密

var encMessage = sjcl.encrypt(key, message) ;
sjcl.decrypt(key, encMessage) ;

AES 或 SHA256 还是别的什么?

4

3 回答 3

6

SHA256 和 AES 是两种不同类型的算法。

SHA256 是一个加密哈希函数:http ://en.wikipedia.org/wiki/SHA-2

AES 是一种加密算法:http ://en.wikipedia.org/wiki/Advanced_Encryption_Standard

因此,在您使用加密的情况下,您实际上是在使用 AES。

于 2012-12-04T15:59:03.710 回答
5

pbkdf2密钥生成使用HMACwith SHA256。但是 sjcl 的默认加密密钥大小AES-CCM仅为128位。如果您愿意AES-CCM-256,我认为您需要执行以下操作,您也不必pbkdf2直接调用。

var encMessage =sjcl.encrypt(somePassword,message,{count:2048,salt:salt,ks:256});
于 2012-12-04T16:17:11.230 回答
1

根据对的粗略检查,我建议它在CCM 模式下使用 AES 。

SJCL主页解释了所使用的加密技术,尽管不可否认,每个功能的文档根本没有解释它。

于 2012-12-04T15:59:30.837 回答