微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – iOS移动应用和Node.js网络应用AES 256加密

我想创建一个iOS移动应用程序,它与我的Node.js Web应用程序进行通信.为了加密从移动设备发送到Web应用程序的数据,我决定使用AES 256加密,然后转换为base64.问题是我发现的所有Objective-C库都没有与Node.js相同的输出(对于相同的密码和输入文本).我真的不知道该怎么办……

以下是一些iOS库:

> FBEncryptor
> AESCrypt
> here也是一个很好的例子

另外,对于Node.js平台,我尝试了这些库:

>所有these four图书馆
>基于this example我建造了我的:

var crypto = require('crypto'); 
var key = "onceuponatime";
var toCrypt = "Hello World!"; 
var output = ''; 
var decrypted = '';

var cipher = crypto.createCipher('aes256', key); 
output += cipher.update(toCrypt, 'utf-8', 'base64');

output += cipher.final('base64');

console.log(output);

var deCipher = crypto.createDecipher('aes256', key); 
decrypted += deCipher.update(output,'base64','utf-8');

decrypted += deCipher.final('utf-8');

console.log(decrypted);

使用FBEncryptor和我的Node.js示例,我为我提供的输入获得了以下加密的base64字符串:7TsBLBvS6A1iByn9OTkzWA ==和mZ9cf4oklVN2ZnD0oQ0Tjw ==.你能帮我找到一个解决方案,我会在iOS和Node.js上得到相同的加密字符串吗?谢谢.

解决方法:

如果查看FBEncryptor的源代码,您将看到它为密钥创建了一个32字节的零填充缓冲区,为IV创建了一个16字节的零填充缓冲区.然后将密钥复制到密钥缓冲区中. IV缓冲区未受影响.为了通过Node.js生成相同的输出,我们需要复制FBEncryptor中发生的事情.

您不需要使用crypto.createCipher,而是需要使用crypto.createCipheriv并提供IV. crypto.createDecipher也是如此.

那么让我们来看看node.js代码

var crypto = require('crypto'); 
var key     = "onceuponatime";
var toCrypt = "Hello World!";

这与原始脚本相同.我们只需导入加密模块并设置加密密钥和要加密的字符串.

// Create the 32-byte zero-filled key buffer
keyBuf = new Buffer(Array(32));
// copy the key into this buffer
keyBuf.write(key, 'utf8');

// Create the 16-byte zero-filled IV buffer
ivBuf = new Buffer(Array(16));

在这里,我们创建了用于加密toCrypt的密钥和IV缓冲区.

var cipher = crypto.createCipheriv('aes256', keyBuf, ivBuf); 
output = cipher.update(toCrypt, 'utf-8', 'base64') + cipher.final('base64');
console.log(output);

接下来,我们使用密钥和IV缓冲区设置密码并加密到Crypt.这产生7TsBLBvS6A1iByn9OTkzWA ==这与FBEncryptor相同.

var deCipher = crypto.createDecipheriv('aes256', keyBuf, ivBuf); 
decrypted = deCipher.update(output,'base64','utf-8') + deCipher.final('utf-8');
console.log(decrypted);

在这里,我们使用密钥和IV缓冲区设置解密并解密加密的字符串.这会产生输出Hello World!.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐