从我可以看出,通过Apple的安全框架中的SecKeyEncrypt方法的各种填充值,它不支持使用SHA512哈希摘要的OAEP填充。实际上,我似乎无法确定SecKeyEncrypt方法是否在CBC过程中对每个块进行任何类型的散列/屏蔽。
这就是我的问题所在。我所有的其他平台(PHP,Android,.NET)都使用带有OAEP填充的RSA和SHA512摘要。
例如:在C#中,我们可以使用BouncyCastle的OaepEncoding类,它接受任何摘要并在分组密码加密过程中执行散列/掩码操作。在php中,phpseclib项目提供相同的功能。
最后,我的问题......可以通过某种方式使用混合的"手册"在iOS上实现相同的功能。散列并使用SecKeyEncrypt?或者我错过了一些更明显的东西。
干杯!
编辑:我想我可能通过移植充气城堡代码来散列/屏蔽每个块,然后将新的字节数组传递给SecKeyEncrypt以进行加密,但这引出了一个问题,SecKeyEncrypt是否已经在内部使用其他散列算法?答案 0 :(得分:0)
对于iOS的安全框架来说,这似乎是不可能的。我有很多问题让OAEP RSA加密能够跨平台正常工作。
但是,我刚收到第三方图书馆提供商Chillkat的回复,他们正在为此添加支持。请参阅:http://www.chilkatforum.com/questions/7778/ios-rsa-encryption-using-oaep-sha512
编辑:我安装了Chilkat的图书馆并让它在几分钟内完成。答案 1 :(得分:0)
从iOS 10.0开始,.rsaEncryptionOAEPSHA512
选项已作为SecKeyAlgorithm
的{{3}}。
快捷键4
let attributes: [String: Any] = [ ... ]
let pk = SecKeyCreateRandom(attributes as CFDictionary, nil)!
let pub = SecKeyCopyPublicKey(pk)!
let message = "Encrypt me".data(using: .utf8)!
var error: Unmanaged<CFError>?
let cipherText = SecKeyCreateEncryptedData(pub, .rsaEncryptionOAEPSHA512, message as CFData, &error)