RSA MD5 和Base64加密原来
Base64原理(3*6)=24=(4*8)
3*6bit
字符串长度不能被3整除时,空出来使用0来补位
Lucy(一个异常用两个=,两个异常用一个=)
变换过程\值 | L | u | c | y | ||||
---|---|---|---|---|---|---|---|---|
ASCII | 76 | 117 | 99 | 121 | ||||
Bit字节 | 01001100 | 01110101 | 01100011 | 01111001 | 00000000 | 00000000 | ||
Bit字节 | 01001100 | 01110101 | 01100011 | 01111001 | ||||
Bit字节 | 01001100 | 01110101 | 01100011 | 01111001 | 00000000 | 00000000 | ||
6字节 | 010011 | 000111 | 010101 | 100011 | 011110 | 010000 | 000000 | 000000 |
十进制 | 19 | 7 | 21 | 35 | 30 | 16 | 异常 | 异常 |
对应编码 | T | H | V | j | e | Q | = |
两个异常等于一个=所以输出一个
解码Base64:以上面的表反向理解:
对应编码->十进制->(这里变为)3*6字节变为4*8字节->(生成)8Bit字节->ASCII
Tom
变换过程\值 | T | o | m | |
---|---|---|---|---|
ASCII | 84 | 111 | 109 | |
Bit字节 | 01010100 | 01101111 | 01101101 | |
6字节 | 010101 | 000110 | 111101 | 101101 |
十进制 | 21 | 6 | 61 | 45 |
对应编码 | V | G | 9 | t |
对应下面的base64表
MD5
MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;
原理:
1. 先从输入的内容开始,把内容分解成字节然后把按照每组512字节分开
生成n个组
计算总数N个字节 那么N/512如果不能够整除就说明最后一组缺少字节所以不足512字节的那组添加一个1后由0补齐
2.
每个组
512->128*4->a,b,c,d
处理对直接进行处理
## RSA加密
第一步,随机选择两个不相同的质数p和q
->61和53(实际这两个质数越大,就越难破解)
第二步,计算n=p*q
n=61*53=3233;
n的长度就是密钥的长度,3233写成
二进制是110010100001一个12位。
实际RSA密钥一般是1024位,重要场合为2048位
第三部,计算N=(p-1)(q-1)
N=60*52=3120
第四步随机选择一个整数e ( 1 < e < N ) 且e和N 互质(两不相同的数)
e=17
第五步,计算e对于N的模反元素d
反模元素就是指有一个整数d,
可以使得e*d被N 除的余数为1
ed=1%N 或写成 ed-1=N
解为:
ex+Ny=1
例如:
已知:e=17 N=3120
17x+3120y=1
这个方程可以用扩展欧几里得算法求解,
(x,y)=(2753,-15)所以d=2753
第六步,将n和e 封装成公钥,n和d封装成私钥
所以公钥就是 (3233,17),私钥就是(3233, 2753)
八、加密和解密
有了公钥和密钥,就能进行加密和解密了。
(1)加密要用公钥 (n,e)
假设鲍勃要向爱丽丝发送加密信息m,他就要用爱丽丝的公钥 (n,e) 对m进行加密。这里需要注意,m必须是整数(字符串可以取ascii值或unicode值),且m必须小于n。
所谓”加密”,就是算出下式的c:
me ≡ c (mod n)
爱丽丝的公钥是 (3233, 17),鲍勃的m假设是65,那么可以算出下面的等式:
6517 ≡ 2790 (mod 3233)
于是,c等于2790,鲍勃就把2790发给了爱丽丝。
(2)解密要用私钥(n,d)
爱丽丝拿到鲍勃发来的2790以后,就用自己的私钥(3233, 2753) 进行解密。可以证明,下面的等式一定成立:
cd ≡ m (mod n)
也就是说,c的d次方除以n的余数为m。现在,c等于2790,私钥是(3233, 2753),那么,爱丽丝算出
27902753 ≡ 65 (mod 3233)
因此,爱丽丝知道了鲍勃加密前的原文就是65。
至此,”加密–解密”的整个过程全部完成。