- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 iOS 上进行原始 RSA 加密。请不要试图说服我不要这样做。
我基本上是用两个 key 进行加密。第一步,使用 key A,使用 SecPaddingPKCS1 并给我一个 256 字节的输出。之后,使用 Key B,我使用 SecPaddingNone。我假设我的输出将保持 256 字节,但它变为 512 字节。我不确定我做错了什么,有人知道吗?我想错了吗?
我使用 SwiftyRSA 库来执行加密。
谢谢
编辑代码:
encryptData 函数已从 SwiftyRSA 复制过来。假设 data
是256字节,是Key A第一次加密的结果。
let dataString = text.dataUsingEncoding(NSUTF8StringEncoding)
let certificateLabel = "certificate"
let certificateRef = self.getCertificateFromKeyChain(certificateLabel)
let certificateData = self.getDataFromCertificate(certificateRef)
let cryptoImportExportManager = CryptoExportImportManager()
let publicKeyRef = cryptoImportExportManager.importPublicKeyReferenceFromDERCertificate(certificateData)
let encryptedData = self.encryptData(data, publicKey: publicKeyRef!, padding: SecPadding.None)
最佳答案
这是 SwiftyRSA 中的一个错误; RSA 返回 blocksize
(在本例中为 256)字节加密后。如果加密超过 blocksize
字节然后数据被分成多个 block ,每个 block 都被加密,所以你会得到blocksize
的倍数字节回来。
当使用 PKCS1 填充时,有效 block 大小减少了 11 个字节,这意味着加密 256 个字节将返回两个 block 或 512 个字节(因为 256 > 256-11 或 245)。
当不使用填充时, block 大小不需要减少 11,但 SwiftyRSA 仍然这样做。我已经测试了没有使用没有填充的 11 字节减少和第二次加密,没有填充,按预期返回 256 字节。回归测试仍然通过,我已经确认 openssl 可以正确解密双重加密的数据(首先使用填充,然后第二次加密,没有填充)。
这已在 Git 存储库中修复,但如果您想修补本地源代码作为解决方法,修复方法是更改 encryptData
如下:
// Encrypts data with a RSA key
public func encryptData(data: NSData, publicKey: SecKeyRef, padding: SecP public func encryptData(data: NSData, publicKey: SecKeyRef, padding: SecPadding) throws -> NSData {
let blockSize = SecKeyGetBlockSize(publicKey)
let maxChunkSize = (padding == .None) ? blockSize : blockSize - 11
...
关于ios - SecKeyEncrypt SecPaddingNone iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114114/
我正在尝试在 iOS 上进行原始 RSA 加密。请不要试图说服我不要这样做。 我基本上是用两个 key 进行加密。第一步,使用 key A,使用 SecPaddingPKCS1 并给我一个 256 字
我是一名优秀的程序员,十分优秀!