提问者:小点点

使用iOS上RSA公钥加密


我编写了一个iOS应用程序来与现有服务器通信。服务器生成RSA密钥对(公钥和私钥),并将公钥发送给客户端。

客户端(iOS应用程序)必须仅使用公钥进行加密,并将加密的数据发送到服务器。

所以,我需要一个Objective-C函数来做RSA加密。

输入:

>

  • 纯文本:你好,世界!
  • 公钥:

    -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEChqe80lJLTTkJD3X3Lyd7Fj+
    zuOhDZkjuLNPog3YR20e5JcrdqI9IFzNbACY/GQVhbnbvBqYgyql8DfPCGXpn0+X
    NSxELIUw9Vh32QuhGNr3/TBpechrVeVpFPLwyaYNEk1CawgHCeQqf5uaqiaoBDOT
    qeox88Lc1ld7MsfggQIDAQAB
    -----END PUBLIC KEY-----
    

    过程:

    + (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
    

    输出:

    uwGuSdCgDxAAN3M5THMRNcec3Fm/Kn uUk7ty1s70oH0FNTAWz/7FMnEjWZYOtHe37G3D4DjqiWijyUCbRFaz43oVDUfkenj70NWm3tPZcpH8nsWYevc9a1M9GbnNF2jRlami8LLUTZiogypSVUuhcJvBZBOfe9cOonX6BG vw=

    问题:

    如何实现这个功能?

    + (NSString *)encryptString:(NSString *)str publicKey:(NSString *)pubKey;
    

    我顶格很久了,在SO、谷歌和苹果的文档上。我发现苹果需要一个. der文件来加密,而不仅仅是公钥。


  • 共2个答案

    匿名用户

    我会回答我的问题:

    这篇文章帮助了我:http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/#its-all-in-the-format

    这导致了我的代码:https://github.com/ideawu/Objective-C-RSA/blob/master/RSA.m#L34

    使用Apple的SecKeyEncrypt(https://developer.apple.com/library/ios/documentation/Security/Reference/certifkeytrustservices/index.html)

    https://github.com/ideawu/Objective-C-RSA

    匿名用户

    >

  • 如果您使用公钥和私钥,则使用SecKeyRef生成这两个密钥,否则使用后端人员提供的密钥与服务器通信。

    这些是一些可以为此目的提供帮助的第三方sdk,我使用了其中一个对我加密和解密有很大帮助的sdk。

    [1]: https://github.com/Kitura/Swift-JWT [2]: https://github.com/TakeScoop/SwiftyRSA [3]: https://github.com/soyersoyer/SwCrypt [4]: https://github.com/Kitura/BlueRSA

    欲了解更多信息,请访问下面的苹果官方留档https://developer.apple.com/documentation/security