【发布时间】:2014-01-19 22:07:28
【问题描述】:
我想创建一个 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 上都获得相同的加密字符串吗?谢谢。
【问题讨论】:
-
显示您的 iOS 代码以及您的测试输入和输出。如果使用 FBEncryptor,您使用的是哪种方法。有几件事需要知道:算法,密钥大小,密钥,模式,iv 如果不是 ECB 模式,ii 填充完成,如果是,它是如何完成的。这些需要知道,而打包方法的问题是这些信息可能不可用。
-
@Theo。 AES256 有不同的版本。结帐nodejs.org/api/crypto.html#crypto_crypto_getciphers 以查看节点支持的内容。另一方面,了解 FBEncryptor 使用哪一个可能会有所帮助
-
@bodokaiser “不同版本的 AES256”是什么意思?只有一个版本。也许您的意思是不同的 Node.js 函数?
-
@Zaph 你查看我给你的链接了吗?有“AES-128-CBC”、“AES-128-CBC-HMAC-SHA1”等等。所以我建议它与 AES256 算法相同。
-
@bodokaiser "AES-128-CBC-HMAC-SHA1" 不是 AES 的不同版本,它描述了一个 Node.js 函数。 “128”指定密钥长度,“CBC”指定 CBC 模式并且需要 iv。 “HMAC-SHA1”是 Node.js 函数执行的附加操作。 AES 对 8 位数据进行加密和解密。脚本语言的问题之一是它们隐藏了真正发生的事情,从而难以实现互操作性。基本上,如果开发人员不了解加密,则开发人员不应该使用加密,安全性中的单个错误(错误)就是彻底失败。
标签: javascript ios iphone node.js encryption