我编写了一个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文件来加密,而不仅仅是公钥。
我会回答我的问题:
这篇文章帮助了我: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