rsa

需求场景

客户端(ios)为了比较安全的通过发起http请求的方式从服务端(java)获取一个重要的数据(这里以字符串举例)采用rsa加解密的方式

实现思路
  • 客户端生成公钥和私钥
  • 公钥转换成通用格式后通过接口传给服务端
  • 服务端使用公钥加密字符串 响应给客户端这个加密后的数据
  • 客户端使用私钥解密字符串
步骤详解(ios端)
  • 生成公钥和私钥
  1. mac 桌面新建文件夹 我这里命名为“rsa公私钥”,用来保存生成的公钥和私钥文件,然后打开终端进入你新建的文件夹,打开openssl


    65WYJMFh图片.png
  2. 生成私钥
genrsa -out rsa_private_key.pem 1024
685NWwVc图片.png
  1. 将私钥转成PKCS8的格式
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
6BvfFZIs图片.png

在这时 拷贝下来我们的私钥, 这个私钥将用于解密,需要注意的是具体使用时需要去掉开头和结尾, 并且去掉其中的换行符。这个后面再说。

-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMpX40MJpXm0FcBx
ovj3cfamqK7/aDGiYV+tSF6eITyu+5ACyba5LY1tch/o2A+cDZuJws/r8bRwebGN
VaQ/A/BQ/jcO55VKezCYQGtvuzcmnJhgdNBJrJxFb3vWfIqWtKFW5cKaPH0bYc72
YddTkojGKZ212acj3f66KNXMactRAgMBAAECgYEAjryW5Zhtcb/2xC2lcIlljEAe
qGwlfTX2CL89WPmlqqApd3pv/wT8PFMjeZ0QpVpJQxpYIcJoXAgn4Hc6HcYSKPe7
Y5McuYjVYKVe0TO6rByBUC0bk4G/7iL3wvK5Vqa+jd5b+XB8GthNJTNQPLHh3G1W
p6iuNVT2JDkpkcD85C0CQQDzIEkKnsLHqzmrWokZ2WJ8K68GV9wt18d4JyifYKae
VfJMCe7E+86kXb54YVVRR8Eqp6gYcXM2LBDoD/B/yHLzAkEA1Q7EnFnlZssmXw3+
c5A4pIqXG6nfJ0IXLIEfa9LRF7uMW0eFJ6sgFEiuZPnbfL+0uUmSbrX28a3p0MIi
0omxqwJAJGhTR8nadTgI3MYj/cD15I5OGW8Sw7KqZi3HAYbhrJhGPmjGXq0ulqKL
IU/CDPfnz1Fn9LEYhaY3qeipJRmJTQJAYUPnsDU+DCqMLvL1ig56PWvjxkZL0OFU
MQYVsSTCPiJp1jYVbOGruHbh3slOUWo3eCtFRXOe9ABgcORf/1vLFwJAXhMOgKq2
Ak84UilMkLin+35nU/oN/qsebdcjyEf0XxvNPap8xF/Cy0DAh8Ju+mjDgwbGDtJC
7uzTt27ZvFBzXA==
-----END PRIVATE KEY-----
  1. 生成公钥
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

做完这一步 看一下我们的文件夹 多了两个文件


6Gzzm4L8图片.png

至此 第一步完成了。

  • 公钥转换成通用格式后通过接口传给服务端

1.获取公钥
接着刚才的命令窗口 键入control + c,使用vim 打开刚刚生成的rsa_public_key.pem文件


6MP4BhJk图片.png

6OyRbGLW图片.png

保存后 命令行键入 :wq ,然后回车

  1. 转换成xml rsa key的通用格式 给java后端使用
    打开转换工具地址:https://superdry.apphb.com/tools/online-rsa-key-converter
    拷贝进去我们上一步保存的公钥 转换得到的xml rsa key公钥如下
    6Za3EvHn图片.png

    我们得到通用格式的公钥,这将是你传给后台的公钥。
ylfjQwmlebQVwHGi+Pdx9qaorv9oMaJhX61IXp4hPK77kALJtrktjW1yH+jYD5wNm4nCz+vxtHB5sY1VpD8D8FD+Nw7nlUp7MJhAa2+7NyacmGB00EmsnEVve9Z8ipa0oVblwpo8fRthzvZh11OSiMYpnbXZpyPd/roo1cxpy1E=AQAB
  • 服务端使用公钥加密字符串 响应给客户端这个加密后的数据

我从服务端得到的加密后的数据如下

ZxeRgfIqacvfMUqeMeIKi2VEJk9J8VVvXz1/fiBWa+YqViBaOQdMV9eDLyZ9Z1EUEg+zDW1XHG0iNcz6A5APrykWFDJME2OpHFZxPVsnelHbKxyRwNk4klW0/XQSf/PMRAX7xJ+NsNfZycVwHZcHizsgdO4jKsz1apaIG21Iims=
  • 客户端使用私钥解密字符串
    移步github下载封装好的工具:https://github.com/ideawu/Objective-C-RSA
    导入RSA.h 和RSA.m文件
    下面使用我们第一步的私钥进行解密 注意:去掉开头结尾 以及中间的换行符,上代码
// 服务端返还的加密的数据
NSString *value_scrpt = @"ZxeRgfIqacvfMUqeMeIKi2VEJk9J8VVvXz1/fiBWa+YqViBaOQdMV9eDLyZ9Z1EUEg+zDW1XHG0iNcz6A5APrykWFDJME2OpHFZxPVsnelHbKxyRwNk4klW0/XQSf/PMRAX7xJ+NsNfZycVwHZcHizsgdO4jKsz1apaIG21Iims=";

// 私钥掐头去尾 去换行符
NSString *private_key = @"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAL2S8LGI1ZbnUIs56zFJZPjq/LV3+wREKQaV+LUKHCv8EH+ihiU93xohT8qaiB5bL4lUQFWN3aNjq8+dwytLWIjkUOJcSlcZiUDUf/DJ3RvIJ4nndQg6t8vD72JNNullalYxCTaWFm82nxctxt9RXBOdgqsm7TV8oMcI1u2xTuLdAgMBAAECgYEAlmnjPgnC5sPMHVusJ+QDEJlqPxXefekS4B3YQtStu5x4/rxWUXBA93uc0rU/8U4Kbp0BmqBATiaEKOwU8eILcNyVtr3YmxdjC9xvnck/ynYLfWZ6vIAFZBSQXG5dLrQHTI6+2+Ii0udggGt5/daGTimzG5voEk6nq7LmpT1mwyUCQQDeJMsTkxRGTUFUFDB2lgVX+mJWLH3KH7rwfZjD0RSvLp/ijix5ikzkphDDAKpee/Y/X88JueBbjPtDip/dvRSbAkEA2ndmK5GofRkOnQgy35cUrS8/6Gcz0Blh1kNmsg9mPWEUv18vnwXR5O/xXFyyYPY3ZD6XLMEfrf+QnvMlCakR5wJARbeWZFZMjqPAVPrhGtaKZsoWAqWD9ONwb/l68Dm2HCSt2RR1sM9OwpO7vvd+gJi297zB5XOIjjL4yIHBGn408QJBAJK62OtwZDrJRpBfvlOAFIoRDxpXnmwpcBXJpUL4ptGYz6eNFd33ubbLFU/UjpYjKKbyhvSvLUjfOlIXuouXe4cCQQDJJKZ4QJV5WPRFLxHi4iX0D+UwAJQSVBjo0+FVxvJPuDjBmeoSytxtB9hbf+J/1dT35fBRiU5gRBfQlnEGzfOB";
// 解密
NSString *value = [RSA decryptString:value_scrpt privateKey:private_key];

打印解密结果

(lldb) po value
H379MfdLWBrZTG41Bt9XPJSuLu8t45UL22QPnSH/NcY=

解密成功!

你可能感兴趣的:(rsa)