【发布时间】:2015-06-30 16:52:40
【问题描述】:
我正在开发一个快速项目,该项目正在扫描 QR 码并获取需要解密的加密 AES-128 数据。
我正在使用一个名为 CryptoSwift 的框架。
我有保存加密数据的二维码的密钥和数据。
var key = "B7zqj4TAXnPevYZAR4T26969"
var qrData = "zWDzClfre4aOjTumzGsnpqh4Sje7sFsbKceA3/OSH3nKRwc7/6fYUajBr/bLh9BB"
编辑:对不起,我忘了提到加密是:
- 密码:AES-128
- 操作模式:CBC
- 填充:PKCS7
- 密钥源自:简单解码
我想知道我应该采取什么方法来解密这个 QR 数据。
任何帮助都会很好。
【问题讨论】:
-
不要使用 CryptoSwift,所有原语都是本土实现,可能有错误/弱点/后门。使用经过严格审查的使用 Apple 的 Common Crypto 的库。此外,CryptoSwift 缺少密钥加密原语,例如 PBKDF2,用于从密码中获取密钥,用于帮助将密码转换为安全密钥。还缺少获取随机数据以用作 iv 以及其他关键用途。 Apple 的 iOS CoreCrypto 内核模块已通过 FIPS-140-2 认证。
-
查看SO answer 获取示例 Swift AES 代码。
-
当您说:“密码:AES-128”时,这是模棱两可的。大概您的意思是 128 位密钥大小。提供的密钥是 24 字节,这将是 192 位的密钥大小。 CBC 模式需要 iv 但未指定。许多实现将默认使用 0x00 字节,但这不能保证,Common Crypto 可以。但最好始终提供 iv。当你说:“密钥派生自:简单解码”时,你期望什么?当前的最佳实践解决方案是 PBKDF2。
-
嗨@zaph,非常好的提示,谢谢你,但我想知道我是否使用Apple的Common Crypto,是否易于导入到swift项目?目前,我正在检查 SO 答案,当我尝试检查这些代码时,我遇到了很多错误。
-
您需要一个桥接头并将
#import <CommonCrypto/CommonCrypto.h>添加到其中。如果您没有桥接头让系统添加一个用于输出,请参见Adding a Bridging Header,您可以在第3步之后删除.m文件。您还需要将Security.framework添加到项目中。如果你使用的是 Swift,那是什么版本。
标签: ios swift spring encryption cryptoswift