一:RSA加密的原理:在了解非对称加密前,需要需要知道加密的原理.
1.互质:互质是公约数只有1的两个整数,叫做互质整数
2.欧拉函数:φ(n),给定任意正整数n,计算在小于等于n的正整数之间,有多少与n构成互质关系.
3.欧拉函数特点:如果n为质数,则φ(n)=n-1.
如:φ(8),在1-8之间有,1,2,3,4,5,6,7,8,而与8构成互质的数为1,3,5,7,也就是说φ(8)=4;
如果m为质数,则φ(n)=n-1,如φ(7),1-6都与7互质.
4.欧拉定理:m^φ(n) mod n = 1;m的φ(n)次方模与n=1,要求m小于n,
对该公式进行推演变成了:m^(kφ(n)+1) mod n = m;
5.模反元素:如果两个正整数e和x互质,那么一定可以找到整数d,是的ed-1被x整除,那么d就是e相对x的模反元素,ed mod x = 1.
根据欧拉定理推导和模反元素推导出公式 m^(e*d) mod n = m;
3 1513 mod 17 = 10 = 3 1315 mod 17
也就是加密: m^e mod n= 解密:c^d mod n = m;
m也就是需要通过公钥加密得到C,C通过私钥解密成m.
说明:
1.n会非常大,长度一般为1024个二进制位.(目前人类已经分解的最大整数,232个十进制位,768个二进制位)
2.由于需要求出φ(n),所以根据欧拉函数特点,最简单的方式n由两个质数相乘得到:质数p1,p2,φ(n)=(p1-1)(p2-1).
3.最终由φ(n)得到e和d.
总共生成6个数字:p1,p2,n,φ(n),e,d
关于RSA的安全:
除了公钥用到了n和e,其余的4个数字是不公开的.
目前破解RSA得到d的方式如下:
1.要想求出私钥d.由于ed=φ(n)k+1,要知道e和φ(n);
2.e是知道的,但是要得到φ(n),必须知道p1,p2.
3.由于n=p1*p2,只有将n因数分解出来才能算出.
4.RSA加密可以加密如关键key这种信息,加密大的内容影响性能.
hash特点:
1.算法是公开的.
2.对相同数据运算,结果是相同的
3.数据加密后是32位16进制字符
4.没办法逆运算
登录账号密码加密:
1.通过RSA加密的话,公司能获取到用户信息,如果数据库泄露,则用户信息全部泄密
2.通过md5加密,后台保存hash值,每次登录时,hash值都是一样的,如果黑客刻意去通过逆向查找匹配字符串,还是可以获取到用户登录信息的.
3.HMAC加密:md5(md5(登录信息+盐)+时间戳)的方式登录,每次截取到的登录信息都是不一样的,大大提高破解难度,但是一旦破解,几乎所有的用户信息都会泄露.
4.优化加密,在HMAC加密的基础上,盐的值由后台返回,每个用户的盐都是不一样的,一个用户泄露,也不会造成所有用户信息泄露.
加密方式:md5((md5(登录信息)+后台返回盐)+后台返回时间戳)
数字签名:
1.比如支付时,防止信息破解后,黑客肆意串改支付金额,需要带一个数字签名的信息,来证明扣费信息没有被串改.
2.用户支付扣款信息整个为A,对其进行md5运算,获取32位字符,运用RSA运算再次对hash值进行加密,发给后台的信息为:A+加密(A)信息,后台获取内容后,对RSA加密信息解密,获取hash值,然后再将原始数据进行md5运算,匹配两个字符串是否相同,如果不相同代表被人串改,不予处理,
加密方式:原始数据+RSA(md5(原始数据))