首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS移动应用和Node.js web应用AES 256加密

iOS移动应用和Node.js web应用AES 256加密
EN

Stack Overflow用户
提问于 2014-01-02 12:44:25
回答 1查看 2.5K关注 0票数 3

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

下面是一些iOS库:

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

  • 所有这四个
  • 基于这个例子,我构建了我的: var crypto = require('crypto');var key = "onceuponatime";var toCrypt = "Hello!“;var output =‘;var解密=’;var密码=crypto.createCipher(‘utf 256’,key);output += cipher.update(toCrypt,'utf-8','base64');output += cipher.final('base64');console.log(输出);var deCipher =crypto.createDecipher(‘美学256’,key);解密+= deCipher.update(输出,‘base64 64’,'utf-8');解密+= deCipher.final('utf-8');console.log(解密);

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-02 14:20:36

如果您查看FBEncryptor的源代码,您将看到它为密钥创建了一个32字节的零填充缓冲区,为IV创建了一个16字节的零填充缓冲区,然后将该密钥复制到密钥缓冲区中。IV缓冲器未被触及。为了通过Node.js产生相同的输出,我们需要复制FBEncryptor内部正在发生的事情。

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

因此,让我们演练一下node.js代码:

代码语言:javascript
复制
var crypto = require('crypto'); 
var key     = "onceuponatime";
var toCrypt = "Hello World!";

这与原来的脚本没有变化。我们只需导入crypto模块并设置加密密钥和要加密的字符串。

代码语言:javascript
复制
// 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缓冲区。

代码语言:javascript
复制
var cipher = crypto.createCipheriv('aes256', keyBuf, ivBuf); 
output = cipher.update(toCrypt, 'utf-8', 'base64') + cipher.final('base64');
console.log(output);

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

代码语言:javascript
复制
var deCipher = crypto.createDecipheriv('aes256', keyBuf, ivBuf); 
decrypted = deCipher.update(output,'base64','utf-8') + deCipher.final('utf-8');
console.log(decrypted);

在这里,我们用密钥和IV缓冲器设置密码,并解密加密的字符串。这将产生输出Hello World!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20883302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档