RSA加密在iOS中经常用到,麻烦的方法是使用openssl生成所需秘钥文件, 需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于解密。至于公钥和私钥的关系,有人形象的把公钥比喻为保险箱,把私钥比喻为保险箱的钥匙,保险箱我可以给任何人,也可以有多个保险箱,任何人都可以往保险箱里面放东西(机密数据),但只有我有私钥(保险箱的钥匙),只有我能打开保险箱。
客户端向服务器请求RSA公钥
----->服务器
----->返给客户端一个NSString
格式的RSA公钥----->客户端用RSA公钥字符串
加密密码
发送给服务器----->服务器用RSA私钥解密并核对密码
----->核对密码是否正确,并返回客户数据给客户端
RSA加密密码序列图
RSA加密密码关系图
例如:这是一串服务器生成的RSA公钥
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDTbZ6cNH9 PgdF60aQKveLz3FTalyzHQwbp601y77SzmGHX3F5NoVUZbd K7UMdoCLK4FBziTewYD9DWvAErXZo9BFuI96bAop8wfl1Vk ZyyHTcznxNJFGSQd/B70/ExMgMBpEwkAAdyUqIjIdVGh1FQ K/4acwS39YXwbS+IlHsPSQIDAQAB
但由于含有/+=\n
等特殊字符串,网络传输过程中导致转义,进而导致加密解密不成功,解决办法是进行URL特殊符号编码解码(百分号转义);具体示例,在Demo中有示例,文章最下方有链接
。
//----------------------RSA加密示例------------------------
//原始数据,要加密的字符串
NSString *originalString = @"这是一段将要使用'秘钥字符串'进行加密的字符串!";
//使用字符串格式的公钥私钥加密解密, RSAPublickKey为公钥字符串(NSString格式)
NSString *encryptStr = [RSAEncryptor encryptString:originalString publicKey:RSAPublickKey];
NSLog(@"加密前:%@", originalString);
NSLog(@"加密后:%@", encryptStr);
//用私钥解密,RSAPrivateKey为私钥字符串(NSString格式)
NSString *decryptString = [RSAEncryptor decryptString:encryptStr privateKey:RSAPrivateKey];
NSLog(@"解密后:%@",decryptString);
如果您觉得有所帮助,请在GitHub上赏个Star ⭐️,您的鼓励是我前进的动力