RSA总结
- 加密算法,都是数学知识
- 对称加密(传统加密算法)
- RSA(三个人的名字)非对称加密(现代加密算法)
- 原根
- 欧拉函数、欧拉定理(费马小定理)
- 模反元素
- m^(e * d) mod n ≡ m
- 迪菲赫尔曼密钥交换
- RSA算法
- RSA: 拆解两个(大)质数的乘积很难!所以RSA想对安全.
- 加密: M ^e % N = C
- 解密: C ^ d % N = M
- 明文 : M; 密文: C ;
- 公钥: N和E
- 私钥: N和d
- 条件(总共有六个数字)
- N是由两个很大的质数(P1、P2)相乘得到! 为了方便求出φ(N).
- D是E(65537)相对于φ(N)的模反元素
1.1 RSA的特点
- RSA的安全系数非常高(因为整个业务逻辑非常安全)
- 加密效率非常低(不能做大数据加密)
- 用来加密关键数据
1.2 终端演示
- Mac的终端可以直接使用OpenSSL进行RSA的命令运行
- OpenSSL中RSA算法常用指令主要有三个:
命令 | 含义 |
genrsa | 生成并输入一个RSA私钥 |
rsautl / pkeyutl | 使用RSA密钥进行加密、解密、签名和验证等运算, pkeyutl公钥解密时需要签名 |
rsa | 处理RSA密钥的格式转换等问题 |
- 生成RSA私钥,密钥长度为1024bit
openssl genrsa -out private.pem 1024
- 从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
- 生成的文件如下
- 将私钥转换成为明文并打开
openssl rsa -in private.pem -text -out private.txt && open private.txt writing RSA key
-
- 查看文本信息也可以使用
cat private.txt
- 通过公钥加密数据,私钥解密数据
//生成明文文件
$ vi message.txt
//查看自己输入的文件内容
$ cat message.txt
密码是: 654321
//通过公钥进行加密
$ openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
//查看加密后的文本
$ cat enc.txt Df;�cb�<t��uU�w�̝@P��F�+�^"�d��t��Ʌf�&O��:�[�8D���+�`�N$�sL�n�LKk �e�KSTXId��Ԅ�)'��]�����y��'h�6�֒;cl;/�T������
//通过私钥进行解密
$ openssl pkeyutl -decrypt -in enc.txt -inkey private.pem -out dec.txt
//查看解密后的密文
$ cat dec.txt
密码是: 654321 %
- 通过私钥加密数据,公钥解密数据
//通过私钥进行加密
$ openssl pkeyutl -sign -in message.txt -inkey private.pem -out enc.txt
$ cat enc.txt
P�ƕ|_]}lӭČP����Ǎ(+�i��#�P���~{�+����G;ػP�b�?~L�z^�)��MX'`)ƛ�h�0�o�� ��6A~6��R���G U�y2�)���|#wCg�A4a�%
//通过公钥进行解密
$ openssl pkeyutl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
pkeyutl: No signature file specified for verify
$ openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
The command rsautl was deprecated in version 3.0. Use 'pkeyutl' instead.
$ cat dec.txt
密码是: 654321