- 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/
在尝试将 SecKeyEncrypt() 与 kSecPaddingNone 一起使用时,我遇到了一些挫折。经过大量调查,我找到了解决方法,但我想知道发生了什么。目前,我没有可用的代码,但我可以在今天
我正在尝试在 iOS 上进行原始 RSA 加密。请不要试图说服我不要这样做。 我基本上是用两个 key 进行加密。第一步,使用 key A,使用 SecPaddingPKCS1 并给我一个 256 字
从我的观察可以看出,苹果安全框架中SecKeyEncrypt方法的各种填充值不支持SHA512哈希摘要的OAEP填充。实际上,我似乎无法确定SecKeyEncrypt方法是否在CBC过程中对每个块进行
任何人请帮助从指数和模数创建SecKeyRef作为我的公共(public)指数 = 010001和 公共(public)模数 =008903fb6d15f352ed3b45add3216f632f71
我尝试使用 iPhone 的 PKI 库来加密一个短字符串 (12345678),但每当我尝试使用 SecKeyEncrypt 时,我总是收到错误 -9809(即 errSSLCrypto)。 Sec
对于 iPad 应用程序(ios5.0,arc),我需要加密传输到我正在使用的 Web 服务的数据。在阅读有关通过 Apple 提供的加密时,我遇到了两个 API 来执行此操作:CCCrypt 和 S
我正在将 PKI api 移植到 Swift 2.2 并发现以下错误。在 Objective-C 中一切正常。 要加密的数据对象大小为 32 字节。这是我正在使用的代码。 let buflen = 6
当尝试使用 SecKeyCreateEncryptedData 加密纯数据 block 时,它使用指定的算法加密纯数据并且工作正常。我用于加密的代码片段是 SecKeyCreateEncryptedD
我正在尝试使用 iOS 上的安全框架使用 RSA 加密一些数据。我想加密一个简单的 base64 编码字符串,如下所示: NSData *data = [[NSData alloc] initWith
我正在使用 SecKeyEncrypt 将 JSON 格式的字符串作为输入。如果向 SecKeyEncrypt 传递一个小于 246 的 plainTextLength,它就可以工作。如果我传递给它的
我是一名优秀的程序员,十分优秀!