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 说明:生 ...
随机推荐
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- ABP文档 - Mvc 控制器
文档目录 本节内容: 简介 AbpController基类 本地化 其它 过滤 异常处理和结果包装 审计日志 验证 授权 工作单元 反伪造 模型绑定器 简介 ABP通过nuget包Abp.Web.Mv ...
- SQLServer事务同步下如何收缩日志
事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...
- 运用php做投票题,例题
要求大概是这样的,有一个题目,题目下面是复选框,要求点完复选框提交后会变成进度条,各选项的进度条百分比,和投票数量 首先还是要在数据库建两张表,如下: 要完成这个题目,需要建两个页面 <!DOC ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- Linux学习
Linux 命令英文全称su:Swith user 切换用户,切换到root用户cat: Concatenate 串联uname: Unix name 系统名称df: Disk free 空余硬盘du ...
- Linux环境下常见漏洞利用技术(培训ppt+实例+exp)
记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...
- Linux-Rhel6 恢复误删文件
需要工具extundelete(可通过xshell上传下载到linux)知识点:ifconifig eth0 查看ipfdisk /dev/sda 管理磁盘m ...
- PHP 数组浅析
PHP的数组具有如下特点:1.数组初始化时无需指定长度:2.数组中的元素无需相同类型:3.数组的长度可变4.可使用var_dump(参数)或者print_r( 参数) 函数查看数组变量.5.数组内的 ...