AES256encryption在node.js和objective-c之间得到不同的结果
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:]
就在这里
问题是node.js crypto.createCipher
内部使用密钥派生函数EVP_BytesToKey()
来生成AES密钥,并使用key = "my password"
来生成iv。 因此,对于node.js和Common Crypto,实际的AES密钥是不同的。
答案是使用crypto.createCipheriv(algorithm, key, iv)
代替crypto.createCipher(algorithm, password)
。
从node.js文档:
根据OpenSSL的build议,使用pbkdf2而不是EVP_BytesToKey,build议您使用crypto.pbkdf2派生密钥和iv,然后使用createCipheriv()创build密码stream。
- 在NodeJS和C#中AES256encryption/解密
- 使用vb.net AES / CBCencryptionstring,并需要使用JavaScript CryptoJS进行解密
- 使用phpseclib使用AES进行encryption,并使用CryptoJS进行解密
- Java BouncyCastle中的确定性AES-CTR?
- 在nodejs中解密.Net cookie
- 如何在NodeJS中使用aes-256-ecb正确encryptionstring并使用OpenSSL的命令行解密?
- AES在.NET中encryption并使用Node.jsencryption解密?
- python(pycrypto)和nodejs(crypto)之间不匹配的encryption(aes-128-cbc)
- 尝试使用crypto-js和nodejs进行解密