Objective C中的Aes-128 cfb8加密

3

我目前正在尝试在Objective C中使用AES-128 CFB8格式加密字符串。我已经搜索了很多地方,但似乎找不到可行的解决方案。Bouncy Castle是理想的解决方案,但它只能在Java和C#上使用。这里最好的选择是OpenSSL吗?但我无法找到任何详细的方法来实际使用OpenSSL进行加密。请指引我正确的方向。转换到其他加密方式不是选项。


你的问题与http://stackoverflow.com/questions/2774239/help-for-aes-128-bit-algorithm-i-want-to-encrypt-it和http://watchitlater.com/blog/2010/02/java-and-iphone-aes-interoperability/有关。 - Mihai8
2个回答

1

CommonCryptor应支持使用kCCModeCFB8的CFB-8。有关详细信息,请参见 CCCrypt的手册页面

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

如果您对这些问题不熟悉,请参见使用CommonCrypto正确加密AES和Mike Ash的Friday Q&A 2012-08-10:CommonCrypto之旅。您需要更改CFB-8中的一个部分,将调用CCryptorCreate替换为调用CCCryptorCreateWithMode,并传递kCCModeCFB8

Rob在评论中指出:kCCModeCFB8是一个CCMode(枚举),而不是CCOptions(位字段)。您不能将其与kCCOptionPKCS7Padding进行OR运算。(如果可以的话,那么PKCS7填充也会打开ECB模式,因为它们都是1。)您必须使用CCCryptorCreateWithMode()来设置模式。我不认为有任何一种方法可以使用类似CCCrypt()的一次性便利函数来设置模式。 - zaph

0

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

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

祝你好运。很抱歉我无法提供任何详细的Objective-C代码,我刚开始学习Objective-C,熟悉在其他语言中完成所有代码库。但是每种语言都有一个shell接口,这是您最好的选择,毫无疑问。


1
你是在描述openssl命令行加密吗?为什么你认为它是最好的方法?OpenSSL的'enc'命令并没有遵循任何真正的标准或最佳实践。它不是很糟糕,但肯定可以做得更好。请参见http://security.stackexchange.com/a/23239/5304以了解有关其问题的一些讨论。 - Rob Napier
如果楼主想在iOS上进行此操作,则使用命令行将不可能(不包括越狱),因为不允许启动新进程。对于OSX,它是可用的。 - Kitsune

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接