RSA加密为非对称加密实现
- 对称加密:加密解密使用同一个算法
- 非对称加密:加密和解密使用不同算法
rsa加密原理
-
应用原理:明文(公钥加密) --> 密文 --> 明文(私钥解密)
简单来说描述如下
- 服务器生成公钥+私钥,将公钥给到客户端
2.客服端 【明文--> 公钥加密 -->密文】 ==> 【服务器】
3.服务器 【密文--> 私钥解密 -->明文】
- 数学原理
关于底层的算法实现涉及到一系列的数学转换步骤,这里简单列举
1.欧拉定理:m^Φ(n) % n ≡ 1
2.费小马定理:m^(n-1) % n ≡ 1
- 由1、2经过一顿神操作:m^(e*d) % n = m
该公式就是rsa基础,至于怎么来的感兴趣的可以去看看密码学相关书籍
将3中的公式分解可得到欧拉加密解密算法
rsa加密:m^e % n = c, rsa解密:c^d % n = m所以
1)m^e % n = c 可以看出是公钥算法(用于加密)
2)c^d % n = m 可以看出是秘钥算法(用于解密)
2)中间变量 “c” 可以看出是密文
这个过程就是rsa算法的基础
生成rsa公钥、秘钥、证书等
这里以MacOSX为例,描述rsa算法的使用过程
OpenSSL是操作rsa相关算法的一个应用,在MacOSX环境下可以直接使用
OpenSSL 常用工具,Mac自带OpenSSL,打开终端直接进行rsa相关操作
genrsa:生成并输入rsa私钥
rsautl:使用rsa秘钥进行加密、解密、签名和验证运算等操作
rsa:处理rsa秘钥的格式转换等
- 生成rsa秘钥(数字可选:512、1024、2048,越大越难破解,但是过大导致加解密过程很慢,一搬使用1024,以目前计算的硬件性能基本不可能破解)
openssl genrsa -out private.pem 1024
2.从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
3.将私钥转换成明文
openssl rsa -in private.pem -text -out private.txt
此处可以使用cat
查看文本信息:cat private.txt
4.公钥加密数据
1)生成明文文件:
vi message.txt
2)查看文件内容:
cat message.txt
3)公钥加密:
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
4)私钥解密:
openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
也可以通过私钥加密、公钥解密
3)私钥加密:
openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt
4)公钥解密:
openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
5.生成证书,由于公钥私钥文件在代码中不直接使用,而是使用证书方式
1)生成证书请求文件:
openssl req -new -key private.pem -out rsacert.csr
依次输入:国家名(cn)、省份名、机构名(xx.inc) ..密码,邮箱等
2) 用该请求文件去证书颁发机构(rsa认证机构)请求证书:
openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
该过程其实是一个认证过程,相当于让该机构“盖个章”
- 提取证书供代码使用
通常在代码中会使用公钥文件
.der
和私钥文件.p12
可通过以下命令直接导出
提取公钥文件der:
openssl x509 -outform der -in rsacert.crt -out rsacert.der
提取私钥文件p12(可设置密码):
openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt