【发布时间】:2013-12-02 15:59:12
【问题描述】:
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==
2.Objective-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
【问题讨论】:
-
我的猜测是 node.js 会自动生成 IV 值,而 iOS 使用的是全零向量。尝试为两者指定相同的 IV 值(文档表明有一个 node.js 方法也可以接受 IV)。
-
@borrrden 有一个方法
crypto.createCipheriv(algorithm, key, iv),我应该如何设置iv? -
就是任意一个128位长的二进制字符串,你可以任意选择,只要两边都用同一个即可。
-
其实我认为你需要先将node.js中的字符串转换成二进制,就像你在Objective-C版本中所做的那样,但我不确定如何(不熟悉node)。
-
我通过执行你的 node.js 代码得到了不同的结果。这是使用给定键和给定文本的结果,还是来自您的生产代码?
标签: ios objective-c node.js encryption aes