1.Node.js
var crypto = require('crypto');
var key = "my password";
var text = "text to encrypt";
var cipher = crypto.createCipher('aes-256-cbc',key);
var crypted =cipher.update(text,'utf8','base64');
crypted+=cipher.final('base64');
结果: ZeYCYOrR / w7qSAZVYht8 + Q ==
。目的-C
{
NSString *key = @"my password";
NSString *text = @"text to encrypt";
NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipher = [plain AES256EncryptWithKey:key];
NSLog(@"%@\n", [cipher base64Encoding] );
}
结果: raFGdTWYvSPWpkgtF9LJIg ==
[AES256EncryptWithKey:]
是 HERE
答案 0 :(得分:1)
问题是node.js EVP_BytesToKey()
在内部使用密钥派生函数key = "my password"
来生成AES密钥,并从crypto.createCipheriv(algorithm, key, iv)
生成。因此,对于node.js和Common Crypto,实际的AES密钥是不同的。
答案是使用crypto.createCipher(algorithm, password)
代替{{1}}。
来自node.js文档:
根据OpenSSL建议使用pbkdf2而不是EVP_BytesToKey,建议您使用crypto.pbkdf2派生一个密钥并使用iv来创建密码流。