【问题标题】:Aes-128 cfb8 encryption in objective c目标 c 中的 Aes-128 cfb8 加密
【发布时间】:2013-02-23 10:19:26
【问题描述】:

我目前正在尝试在目标 c 中加密 aes-128 cfb8 格式的字符串。我到处寻找,但似乎找不到有效的解决方案。 Bouncy castle 是一个理想的解决方案,但它仅适用于 java 和 c#。 openssl 是这里的最佳选择吗?我似乎找不到任何详细的方法来实际使用 openssl 进行加密。请引导我走向正确的方向。切换到另一种加密不是一种选择。

【问题讨论】:

标签: objective-c xcode cocoa aes


【解决方案1】:

CommonCryptor 应该支持使用 kCCModeCFB8 的 CFB-8。详情请见man page for CCCrypt

也就是说,我总是警告人们要非常小心地使用任何像 CommonCryptor 这样的低级库手动实现这类东西。做错事非常容易。例如,您必须使用 KDF 从密码正确生成密钥(您不能只是将密码按字节复制到密钥数据中),并且 IV 必须是随机的,否则 CFB 会失去一些安全性(更具体地说,您绝不能重用相同的密钥和IV)。

如果您不熟悉这些问题,请参阅 Properly encrypting with AES with CommonCrypto 和 Mike Ash 的 Friday Q&A 2012-08-10: A Tour of CommonCrypto。您需要为 CFB-8 更改的一项是将CCryptorCreate 的调用替换为对CCCryptorCreateWithMode 的调用,传递kCCModeCFB8

【讨论】:

  • Rob 在评论中指出:kCCModeCFB8 是 CCMode(枚举),而不是 CCOptions(位域)。你不能用 kCCOptionPKCS7Padding 或它。 (如果可以,那么 PKCS7 Padding 也会打开 ECB 模式,因为它们都是 1。)您必须使用 CCCryptorCreateWithMode() 来设置模式。我不相信有任何方法可以使用像 CCCrypt() 这样的 1-shot 便利函数来设置模式。
【解决方案2】:

我目前正在为医疗单位制定安全协议。我绝对相信 openssl 是加密数据的最佳方法。尽可能使用本机文件系统来卸载工作并减少开发时间,而不会引入错误代码。话虽如此,我对 Objective-c 还是很陌生。

  1. 使用您的 Objective-c 程序构建命令行。
  2. 使用您的 Objective-c 程序将该命令行传递给 shell。
  3. 让 shell 处理您的加密。
  4. 从 shell 接收 openssl 结果并处理结果以确定是否出现任何错误。 @"" 表示没有错误。

祝你好运。抱歉,我无法提供任何详细的 Objective-C 代码,我这周刚开始使用 Objective-C,并且熟悉使用其他语言编写所有代码库。但是每种语言都有一个 shell 界面,毫无疑问,这是您的最佳选择。

【讨论】:

  • 我认为您是在描述 openssl 命令行加密?为什么你认为这是最好的方法? OpenSSL 'enc' 命令不遵循任何真正的标准或最佳实践。这并不可怕,但肯定会好得多。有关其问题的一些讨论,请参阅security.stackexchange.com/a/23239/5304
  • 如果 OP 有兴趣在 iOS 上执行此操作,那么由于不允许启动新进程,因此无法使用命令行(不包括越狱)。对于 OSX,它将是可用的。
猜你喜欢
  • 2018-01-08
  • 2013-01-16
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多