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

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

用户注册时不是直接发送用户名,密码,验证码等明文信息给服务器请求注册。而是先发送一个注册请求,服务器会把公钥返回给客户端,服务器返回的公钥一般是一个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. 9.5 翻译系列:数据注解之ForeignKey特性【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code ...

  2. mariadb(MySql)设置远程访问权限

    [问题]mariadb(MySql)安装之后,本地连接mysql是可以的,但是远程的机器不能连接和访问. [解决]修改mysql远程连接的ip限制配置. [步骤]1.本地mysql客户端连接mysql ...

  3. 0x02 Spring Cloud 学习文档

    每个Spring项目都有自己的; 它详细解释了如何使用项目功能以及使用它们可以实现的功能. Spring Cloud 版本 参考文档 API文档 Finchley SR2 CURRENT GA Ref ...

  4. [ci]jenkins-slave的添加(vm模式,通过ssh和jnlp)

    jenkins-slave的添加-在vm上通过jnlp方式 参考:http://www.cnblogs.com/sparkdev/p/7102622.html 下载 slave.jar和slave-a ...

  5. 9款最好的JavaScript压缩工具

    削减是一个从源代码中删除不必要的字符的技术使它看起来简单而整洁.这种技术也被称为代码压缩和最小化.在这里,我们为你收集了10个最好的JavaScript压缩工具将帮助您删除不必要的空格,换行符,评论, ...

  6. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-11层驱动之FSMC

    视频简介:该视频介绍iCore3应用开发平台中FSMC通信的配置方法及ARM与FPGA通信的方法. 源视频包下载地址:链接:http://pan.baidu.com/s/1slbHOCH 密码:n06 ...

  7. Future 模式简介

    简介 Future 模式是多线程开发中的一种常见设计模式,它的核心思想是异步调用. 比如我们在网上购物,付款后就会产生一个订单,之后你该干嘛干嘛,快递小哥会上门送货,而不必像在超市结账那样,付款后要等 ...

  8. [转]理解下DMA/NorFlash/DDR下的Burst是个什么概念

    DMA传送不经过CPU的控制,假如硬盘的数据不能经过DMA控制器读到内存,那么每完成一次将硬盘的数据读出来,再存放到内存的操作,都要通过CPU运行几条读写指令来完成,这时CPU就做不了别的事了,如果有 ...

  9. MapReduce教程(二)MapReduce框架Partitioner分区<转>

    1 Partitioner分区 1.1 Partitioner分区描述 在进行MapReduce计算时,有时候需要把最终的输出数据分到不同的文件中,按照手机号码段划分的话,需要把同一手机号码段的数据放 ...

  10. Windows 使用 Gogs 搭建 Git 服务器

    随便说两句 之前有使用 Gitblit 在Windows搭建Git服务器,用的也挺好的,可能安装起来略麻烦一点.现在全用 Gogs 在windows搭建Git服务器,主要是因界面好看,管理更方便一些. ...