RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密
最近换了一份工作,工作了大概一个多月了吧。差不多得有两个月没有更新博客了吧。在新公司自己写了一个iOS的比较通用的可以架构一个中型应用的不算是框架的一个结构,并已经投入使用。哈哈
说说文章标题的相关的内容吧
很多对安全要求比较高的应用都要使用加密,加密后与后端沟通数据,这样能防止被别人截获数据包,直接把接口的参数数据暴露。我上一家公司是做P2P互联网金融的,就使用了多种加密方式,有对称的也有非对称的。最近新公司的APP也有意向使用加密,思考了一下,最成熟的解决方案就是使用RSA非对称的加密了。就不介绍非对称加密是怎么回事了,不了解的自行Google或者bing。生成公钥私钥证书我使用的是OpenSSL的解决方案,没错,就是老罗捐了几次款,爆出过心脏滴血漏洞的OpenSSL。
先说说证书的生成吧,我使用的是MAC,上面自带了OpenSSL,当然我删除了,又用HomeBrew安装了一个较新的版本。又看了下Linux上也自带了openssl,windows上没有,可以去官网下载安装
1.终端输入openssl,进入openssl状态
2.生成一个1024位的私钥:genrsa -out rsa_private_key.pem 1024
3.利用私钥生成JAVA支持的PKCS8类型的私钥:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem
4.生成JAVA支持的PKCS8二进制类型的私钥:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform DER -nocrypt -out pkcs8_private_key.der
5.生成公钥:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
6.生成iOS支持的der证书,其间用到了证书请求和自签署根证书
6.1.创建证书请求:req -new -out cert.csr -key rsa_private_key.pem (其间会要求填写国家地区公司信息等,随便填写OR认真填写都不影响证书使用)
6.2.创建X509的自签署跟证书(iOS支持X509,有效期3650天):x509 -req -in cert.csr -out rsa_public_key.der -outform der -signkey rsa_private_key.pem -days 3650
完成了以上的步骤后应该在你所在的目录下生成了6个文件,其中pem的文件都是文本类型的,都可以使用文本编辑器或者cat命令查看。der的都是二进制的文件了,看不了。
以上的都完了,推荐打开github的链接,一个不认识的人写的,里面包含了java端和iOS的实现方式。https://github.com/BabyDuncan/RSA_OC_JAVA
但是有两点是需要注意的:
1.java那个使用公钥的部分,应该使用上述的第4步生成的 pkcs8_private_key.der 文件,不要眼花啊
2.OC中在bundle中找不到der类型的文件,需要改一下上述6.2生成的 rsa_public_key.der 文件的后缀为 .cer 才可以。
完成上述的操作后就可以正常的使用了。
插播一句:如果在java中想使用 pkcs8_private_key.pem 文件的话,请自行把那段代码,没错就是那段代码(至于到底是哪段,自己找)替换成下面的这段
byte[] privateKeyData = Files.readAllBytes(
Paths.get("/Users/ald1/Documents/workspace/aaa/src/pkcs8_private_key.pem"));
byte[] decodedKeyData = Base64.decodeBase64(new String(privateKeyData)
.replaceAll("-----\\w+ PRIVATE KEY-----", "")
.replace("\n", ""));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(decodedKeyData);
当然,文件的路径自行脑补。
再附送几个调研此次成果的链接,可能相关性不是很大,看下就好
OpenSSL的官网帮助:http://openssl.org/docs/manmaster/apps/rsa.html
iOS的获取公钥私钥:http://codego.net/455876/
证书转换:https://www.sslshopper.com/ssl-converter.html
随意看看会有帮助的文章:http://blog.csdn.net/as3luyuan123/article/details/16105435
http://witcheryne.iteye.com/blog/2171850
http://blog.chinaunix.net/uid-26729093-id-4449165.html
好了就到这吧。
RSA非对称加密,使用OpenSSL生成证书,iOS加密,java解密的更多相关文章
- CentOS6系统openssl生成证书和自签证书
CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...
- 使用OpenSSL生成证书
使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...
- 如何利用OpenSSL生成证书
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...
- [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.
接上面一篇blog 发现openssl 生成server.crt 时有问题. 找了一个网站处理了一下: http://blog.sina.com.cn/s/blog_49f8dc400100tznt. ...
- PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解
一.公钥加密假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个文 ...
- openssl 生成证书基本原理
摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...
- Golang(十一)TLS 相关知识(二)OpenSSL 生成证书
0. 前言 接前一篇文章,上篇文章我们介绍了数字签名.数字证书等基本概念和原理 本篇我们尝试自己生成证书 参考文献:TLS完全指南(二):OpenSSL操作指南 1. OpenSSL 简介 OpenS ...
- 使用 openssl 生成证书
一.openssl 简介 目前最流行的 SSL 密码库工具官网:https://www.openssl.org/source/ 构成部分 密码算法库 密钥和证书封装管理功能 SSL通信API接口 用途 ...
- win openssl 生成证书
第1步:生成私钥 有密码:openssl genrsa -des3 -out private.key 1024无密码:openssl genrsa -out private.key 1024 说明:生 ...
随机推荐
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 前端开发中SEO的十二条总结
一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- Js new到底发生了什么
在Js中,我们使用了new关键字来进行实例化 那么在这个new的过程中到底发生了什么? 关于构造函数的return 正常来讲构造函数中是不用写return语句的,因为它会默认返回新创建的对象. 但是, ...
- C#中将DataTable导出为HTML的方法
今天我要向大家分享一种将DataTable导出为到HTML格式的方法.有时我们需要HTML格式的输出数据, 以下代码就可以帮助我们达到目的,. 首先,我们要绑定DataTable和 DataGridV ...
- CGI与FastCGI nginx+PHP-FPM
本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...
- PHP之GD函数的使用
本文讲解常用GD函数的应用 1.一个简单的图像 我们先看一个例子: <?php $w = 200; $h = 200; $img = imagecreatetruecolor($w,$h); $ ...
- 纸箱堆叠 bzoj 2253
纸箱堆叠 (1s 128MB) box [问题描述] P 工厂是一个生产纸箱的工厂.纸箱生产线在人工输入三个参数 n, p, a 之后,即可自动化生产三边边长为 (a mod P, a^2 mod p ...
- Highcharts中国地图热力图
最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...
- webService
什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用. 1:从WebService的工作模式上 ...