在 Swift 中将 RSA 加密块大小增加到 512

Increase the RSA Encryption block size to 512 in Swift

提问人:Satyam 提问时间:9/21/2023 最后编辑:Satyam 更新时间:9/21/2023 访问量:80

问:

在 Swift 中,我想加密我的文本并发送到服务器。我写了下面的代码来加密。
我正在使用算法
SecKeyAlgorithm.rsaEncryptionOAEPSHA512

func encrypt(_ plainText: String) throws -> String {
    let plainData = plainText.data(using: .utf8)!
    let cfData: CFData = plainData as NSData as CFData
            
    var error: Unmanaged<CFError>?
    guard SecKeyIsAlgorithmSupported(publicKey, .encrypt, algorithm) else {
        fatalError("Can't use algorithm with this key!")
    }
            
    guard let cipherData = SecKeyCreateEncryptedData(publicKey, algorithm, cfData, &error) else {
        throw error!.takeRetainedValue() as Error
    }
    
    // Convert the encrypted data to a base64 string so it can be easily transmitted or stored
    let cipherText = (cipherData as Data).base64EncodedString()
    return cipherText
}

我使用和它的打印 256 打印块大小。SecKeyGetBlockSize(publicKey)

如果传递给函数的纯文本小于 256 字节/字符,则代码运行良好。但我的文本长度超过 300 字节。如何增加加密文本的大小以支持此功能?

SWIFT 安全 加密 AES

评论

1赞 Xecrets 9/21/2023
不应使用 RSA 加密数据。通常,您只使用 RSA 对用于对称加密的密钥进行加密。然后,使用对称算法和合适的操作模式(如 GCM)对数据进行加密,并且对可以加密的数据大小没有限制。您帖子的标题具有误导性,也可能表明问题的某些部分根源。您使用的不是 AES,而是 RSA。
2赞 Topaco 9/21/2023
可以使用 RSA 加密的最大数据量由密钥大小减去由填充确定的值给出。对于 OAEP,此值取决于摘要。使用 4096 位密钥和 SHA256 的 OAEP,最多可以加密 512 - 66 = 446 字节,请参阅此处
0赞 Satyam 9/21/2023
@Topaco 对于 RSA,我无法提供密钥大小。
2赞 Topaco 9/21/2023
密钥大小是在生成 RSA 密钥时指定的(如果未明确指定,则通常应用默认值,例如 2048 位)。

答: 暂无答案