非对称加密需要两把钥匙:公钥和秘钥。

单向加密:一般情况下服务器会持有秘钥和公钥,那该怎么使用呢?以注册场景为例,最初服务器持有公钥和密钥。

用户注册时不是直接发送用户名,密码,验证码等明文信息给服务器请求注册。而是先发送一个注册请求,服务器会把公钥返回给客户端,服务器返回的公钥一般是一个base64编码的字符串。客户端会把密码信息用这个公钥加密,得到一个密文,之后再将“用户名”+“密码的密文”+“验证码”之类的信息发送给服务器,服务器收到请求,将得到的密码密文解密,得到铭文密文+用户名+验证码,验证以后返回给客户端是否注册成功。

下面先说一下如何生成公钥和密钥。

MAC自带了openssl工具,我们可以很容易生成公钥密钥:生成步骤

1、打开终端,输入
openssl 2、生成一个长度为 1024字节的密钥
$  genrsa -out private_key.pem 1024
解释:genrsa : generate RAS 的缩写,指定生成秘钥的方法为RSA
-out 后面是输出的密钥文件名
1024表示生成秘钥的长度 1024 bityes
3、根据秘钥请求一个整数,可以拿着这个整数去证书颁发机构(CA)申请一个数字证书,CA会给你一个新的cacert.pem,那才是你的数字证书。
req -new -key private_key.pem -out rsaCertReq.csr

4、生成整数并签名,有效期10年
$ x509 -req -days 3650 -in rsaCertReq.csr -signkey private_key.pem -out rsaCert.crt
解释:
509是一种通用的证书格式
将用上面生成的秘钥 private_key.pem 和 rsaCert.crt 证书请求文件生成一个数字证书 rsacert.crt。这个就是公钥
5、格式转换,将PEM格式文件转成 DER格式:(供ios端测试用)
$ x509 -outform der -in rsaCert.crt -out public_key.der
解释:
在ios开发当中,公钥是不能使用 base64编码的,上面的命令是把公钥的base64编码字符串装换为二进制数据 6、ios开发当中,私钥不能直接使用,需要导出一个p12文件(private_key.p12):(供ios端测试用)
$ pkcs12 -export -out private_key.p12 -inkey private_key.pem -in rsaCert.crt

7、用私钥 生成 可供后台使用的公钥rsa_public_key.pem
$ rsa -in private_key.pem -out rsa_public_key.pem -pubout

8、生成可供后台使用的私钥 pkcs8_private_key.pem
$ pkcs8 -topk8 -in private_key.pem -out pkcs8_private_key.pem -nocrypt
9、生成可供 java 后端使用的私钥 pkcs8_private_key.pem
$ openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform DER -nocrypt -out pkcs8_private_key.der


现在,公钥密钥都有了。

参考:

https://blog.csdn.net/Boyqicheng/article/details/51858429

写了一个Demo,可以测试RSA加密字符串的流程。加密过程是有点慢的。

https://github.com/wjwdive/RSAEncrypt.git

iOS RSA非对称加密测试流程的更多相关文章

  1. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 voi ...

  2. RSA非对称加密Java实现

    原文 加密基础方法类 import java.security.MessageDigest; import sun.misc.BASE64Decoder; import sun.misc.BASE64 ...

  3. ssh rsa 非对称加密 基本原理

    我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...

  4. javascript版前端页面RSA非对称加密解密

    最近由于项目需要做一个url传参,并在页面显示参数内容的需求,这样就会遇到一个url地址可能会被假冒, 并传递非法内容显示在页面的尴尬情况 比如xxx.shtml?server=xxx是坏人& ...

  5. Atitit RSA非对称加密原理与解决方案

    Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制  3 1.4. 基于rsa的授权验证机器码 4 1.5. ...

  6. 前端js,后台python实现RSA非对称加密

    先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...

  7. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...

  8. php RSA非对称加密 的实现

    基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...

  9. RSA 非对称加密,私钥转码为pkcs8 错误总结

    RSA 非对称加密,私钥转码为pkcs8 错误总结 最近在和某上市公司对接金融方面的业务时,关于RSA对接过程中遇到了一个坑,特来分享下解决方案. 该上市公司简称为A公司,我们简称为B公司.A-B两家 ...

随机推荐

  1. SNF快速开发平台WinForm-CS甘特图

    我们在做项目当中会经常用到按时间进度查看任务,其通过条状图来显示项目,进度,和其他时间相关的系统进展的内在关系随着时间进展的情况. 甘特图包含以下三个含义: 1.以图形或表格的形式显示活动: 2.通用 ...

  2. 【Spark 深入学习 -09】Spark生态组件及Master节点HA

    ----本节内容------- 1.Spark背景介绍 2.Spark是什么 3.Spark有什么 4.Spark部署 4.1.Spark部署的2方面 4.2.Spark编译 4.3.Spark St ...

  3. linux每日命令(35):grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  4. Oracle 创建分区表

    --查看数据库中所有用户的分区表 SELECT * FROM DBA_TABLES WHERE PARTITIONED='YES' AND OWNER NOT IN ('SYSTEM','SYS') ...

  5. [转]bootstrap table 动态列数

    原文地址:https://my.oschina.net/u/2356355/blog/1595563 据说bootstrap table非常好用,从入门教程中了解到它的以下主要功能: 由于固定表头意味 ...

  6. Java编程的逻辑 (84) - 反射

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  7. Java知多少(101)图像缓冲技术

    当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象.为了提高显示效果,许多应用程序都采用图像缓冲技术,即先把图像完整装入内 ...

  8. Solr学习笔记——查询

    1.进入Solr管理界面http://localhost:8983/solr/ 可以看到Query中有若干的参数,其意义如下(参考:http://www.jianshu.com/p/3c4cae5de ...

  9. swoole webSocket服务

    socket.php <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); //监听WebSocket连接打开事件 (刚打开的时候会给客户端发送 ...

  10. Web上传文件的原理及实现

    现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2 ...