我目前正在尝试在目标 c 中加密 aes-128 cfb8 格式的字符串。我到处寻找,但似乎找不到有效的解决方案。Bouncy castle 是一个理想的解决方案,但它仅适用于 java 和 c#。openssl 是这里的最佳选择吗?我似乎找不到任何详细的方法来实际使用 openssl 进行加密。请引导我走向正确的方向。切换到另一种加密不是一种选择。
2 回答
CommonCryptor 应该支持 CFB-8 使用kCCModeCFB8
. 有关详细信息,请参阅CCCrypt 的手册页。
也就是说,我总是警告人们要非常小心地使用任何像 CommonCryptor 这样的低级库手动实现这种东西。做错事非常容易。例如,您必须使用 KDF 从密码正确生成密钥(您不能只是将密码按字节复制到密钥数据中),并且 IV 必须是随机的,否则 CFB 会失去一些安全性(更具体地说,您绝不能重用相同的密钥和IV)。
如果您不熟悉这些问题,请参阅使用 CommonCrypto 正确加密 AES和 Mike Ash 的星期五问答 2012-08-10:CommonCrypto 之旅。您需要为 CFB-8 更改的一项是将调用替换为调用CCryptorCreate
,CCCryptorCreateWithMode
传递kCCModeCFB8
.
我目前正在为医疗单位制定安全协议。我绝对相信 openssl 是加密数据的最佳方法。尽可能使用本机文件系统来卸载工作并减少开发时间,而不会引入错误代码。话虽如此,我对objective-c还是很陌生。
- 使用你的 Objective-C 程序来构建命令行。
- 使用您的objective-c 程序将该命令行传递给shell。
- 让外壳处理您的加密。
- 从 shell 接收 openssl 结果并处理结果以确定是否发生任何错误。@"" 表示没有错误。
祝你好运。抱歉,我无法提供任何详细的 Objective-C 代码,我这周刚开始使用 Objective-C,并且熟悉使用其他语言编写所有代码库。但是每种语言都有一个 shell 接口,毫无疑问,这是你最好的选择。