RSA文件加密工具

一.加密的分类

1.对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

2.非对称加密
需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

二.RSA

1.RSA的由来
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

2.RSA的加解密公式

加密: 公钥(e,n) 密文 = 明文^e % n
解密: 私钥(d,n) 明文 = 密文^d % n

3.数学知识

素数(质数):除过1和本身,不能被其他数整除的数

互质数:公约数只有1的俩个数

两个质数一定是互质数
一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如5和12
如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和88
1和任意一个自然数是都是互质关系,比如1和100
相邻的两个自然数是互质数,如 15与 16
相邻的两个奇数是互质数 ,如 49与 51

欧拉函数:欧拉函数是小于x的正整数中与x互质的数的数目。

例如:若m、n互质f(mn) = f(m)f(n) = (m-1)(n-1);

欧拉定理:如果俩个正整数a和n互质,则n的欧拉函数F(n)可以让下列式子成立:
a ^ F(n) % n = 1 % n 即
a ^ F(n) % n = 1

模反元素(逆元):根据欧拉定理,如果俩个数互质,那么一定可以找到一个整数b,使得ab-1可以被整除,即ab%n=1。这时,b就叫做a的“模反元素”,或者称为模的逆元

4.RSA密钥产生的过程

  1. 随机选择俩个不相等的质数pq
  2. 计算pq的乘积n,n=pq
  3. 计算n的欧拉函数F(n)
  4. 随机选择一个整数e1< e <F(n),且e与F(n)互质
  5. 计算e对于F(n)的模反元素d,使得(de)modF(n) = 1
  6. 产生公钥(e,n),私钥(d,n)

5.加密和解密
假设A给B发送信息m,m为加密信息,首先要使用公钥(e,n)进行加密。m必须是整数且m必须小于n。设加密后的信息为c
加密:

c=m^e mod n

当B收到A发送的消息后使用私钥(d,n)进行解密
解密
m=c^d mod n

6.RSA加密的安全性
RSA密钥产生的过程中共产生6个值分别为 p,q,n,F(n),e,d。其中只有e,n是公开的,p和q一般会销毁,d不能泄露。

而且由RSA产生密钥的过程可知,只有知道e和F(n)才能求出d,而只有知道p,q才能知道F(n)。
而n=pq 所以只有将n因数分解,才能求出p和q。

但是当p和q是一个大的素数时,从他们的积pq去分解因子p和q这是一个目前还没有解决的数学难题。目前已知被破解的最长的RSA密钥也仅仅是768位,而在RSA算法中一般都采用1024位的数字。因此RSA加密算法时非常安全的。

7.使用场景

网络通讯协议Https

  1. 浏览器发起链接请求。
  2. 服务器返回公钥。
  3. 浏览器产生一个对称加密密钥session key。
  4. 使用服务器的公钥加密此session key。
  5. 加密的session key 发送给服务器。
  6. 服务器通过私钥解密session key, 获取明文密码。
  7. 浏览器和服务器的通信现在通过session key 进行加密,进行安全通信

ssh登录

  1. 远程Server收到Client端用户的登录请求,Server把自己的公钥发给用户。
  2. Client使用这个公钥,将密码进行加密。
  3. Client将加密的密码发送给Server端。
  4. 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
  5. 若验证结果,给Client相应的响应
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值