公钥加密算法 也叫非对称加密,它在加密和解密时使用的是不同的密钥,具有这样的特征:
最常见的公钥加密算法是RSA公钥加密算法,也是签名中普遍使用的算法。其数学原理如下:
理论上 {n, e} 和 {n, d} 可以互换,任何一个都可以是公钥或者私钥,加密和解密的函数也可以互换。但实践中,一般固定设置 e = 65537(0x10001) ,相当于公开的一个约定,这样一来 {n, e} 就只能作为公钥使用。
哈希算法
也叫散列或者摘要算法,对一段任意长度的数据,通过一定的映射和计算,得到一个固定长度的值,这个值就被称为这段数据的哈希值(hash)。给定一个哈希算法,它一定具有以下特征:
常见的哈希算法有: md5, sha1, sha256等,其中sha1长度为160bits,而sha256长度为256bits,二者相比,sha256的取值范围更大,因此碰撞和破解的概率更低,也就相对更安全。
B. RSA算法举例
首先看下rsa算法:
找两素数p和q
计算n=p*q和
t=(p-1)*(q-1)
取小于n的一个数e,并且e与t互质,就是最大公约数是1
找一个数d,d满足(ed-1)
mod
t
=0
公钥取(n,e),私钥取(n,d)
现在开始分析,
已知公钥是(n=35,e=5),那么
n=p*q,p与q只能是7和5
那么t就是24
而(ed-1)%t=0
也就是(5d-1)%24=0,那么可以取d为5
所以私钥是
(d=5,n=35)
解密公式:m=c^d
mod
n
=10^5
mod
35
=5
所以明文m是5
C. 什么是RSA非对称加密
非对称密钥——RSA算法
RSA算法是最流行的公钥密码算法,使用长度可以变化的密钥。RSA是第一个既能用于数据加密也能用于数字签名的算法。
RSA算法原理如下:
1.随机选择两个大质数p和q,p不等于q,计算N=pq;
2.选择一个大于1小于N的自然数e,e必须与(p-1)(q-1)互素。
3.用公式计算出d:d×e = 1 (mod (p-1)(q-1)) 。
4.销毁p和q。
最终得到的N和e就是“公钥”,d就是“私钥”,发送方使用N去加密数据,接收方只有使用d才能解开数据内容。
RSA的安全性依赖于大数分解,小于1024位的N已经被证明是不安全的,而且由于RSA算法进行的都是大数计算,使得RSA最快的情况也比DES慢上倍,这是RSA最大的缺陷,因此通常只能用于加密少量数据或者加密密钥,但RSA仍然不失为一种高强度的算法。
D. 缁椤嚭p銆乹銆乪銆丮锛岃捐′竴涓猂SA绠楁硶锛屾眰鍏阍ワ纴绉侀挜锛屽苟涓斿埄鐢≧SA绠楁硶锷犲瘑鍜岃В瀵嗭纻
闾f垜缁欎綘瑙i喷涓婻SA钖э纴灏介噺璁╀綘鐪嬫哕锛
*RSA鏄闱炲圭О锷犲瘑浣撶郴锛屼篃灏辨槸璇村姞瀵嗙敤涓涓鍏阍ワ纴瑙e瘑鐢ㄤ竴涓绉侀挜锛岃繖2涓瀵嗛挜涓嶅悓锛岃繖镣归潪甯搁潪甯搁吨瑕併
鍏跺疄RSA闱炲父绠娲侊纴浣嗗緢缇
娴佺▼
1锛屽绘垒2涓澶х殑绱犳暟p锛宷 n=p*q=33 N=锛坧-1锛*锛坬-1锛=20
鍏阍e涓鑸鏄3 绉侀挜d瑕侀氲繃鍏阍e铡荤畻鍑烘潵
e*d=1(mod N) 灏辨槸璇磂鍜宒镄勪箻绉妯N寰1 涔熷氨鏄痚鍜宒鍏充簬妯N浜掍负阃嗗厓
3*7=1锛坢od 20锛 鍙鐭d=7
锷犲瘑镄勬槑鏂囱句负M 锷犲瘑钖庣殑瀵嗘枃璁句负c
锷犲瘑杩囩▼锛欳=M^e(mod n)
瑙e瘑杩囩▼锛歁=C^d(mod n)
涓句釜鍏蜂綋镄勪緥瀛 锅囧侻=2
锷犲瘑杩囩▼锛欳=2^3(mod 33)=8(mod 33)
瑙e瘑杩囩▼锛歁=8^7(mod 33)=2097152(mod 33)=2(mod 33) 鍙浠ョ湅鍑哄拰鍜屾湰𨱒ョ殑鏄庢枃鏄鐩稿悓镄勚
铡熺悊鍙浠ョ悊瑙d负 M=M^(ed) (mod n)
链渚嬩腑 e*d=21 涔熷氨鏄鏄疢^21娆℃柟绛変簬M
RSA杩欎釜鐗规ф槸鏁拌轰腑镄勮垂椹瀹氱悊鎺ㄥ嚭镄
鍦ㄨ茶茬粏鑺 姣斿傛ゼ涓诲姞瀵嗙殑鏄26镄勫瓧姣 灏卞綋鏄庢枃镄勫兼槸浠1鍒26
灏辨嬁n=33璇村惂 锷犲瘑钖庣殑瀵嗘枃镄勫兼槸1鍒33 杩椤緢姝e父
浣嗘槸瑙e瘑钖 涓瀹氩拰鏄庢枃镄勫肩浉钖 涔熷氨鏄1鍒26
瀹为檯𨱍呭喌涓 鍏阍e鏄鍏寮镄 绉侀挜d鏄淇濆瘑镄
姣斿傜敳瑕佺粰涔椤彂涓涓滆タ 涔欑殑鍏阍ョ敱浜庢槸鍏寮镄 镓浠ョ敳鐭ラ亾 浣嗙敳涓岖煡阆扑箼镄勭侀挜
鐢插厛鐢ㄤ箼镄勫叕阍ュ姞瀵 涔嫔悗 杩欎釜瀵嗘枃鍙鑳界敤涔欑殑绉侀挜 鐢变簬涔欑殑绉侀挜鏄淇濆瘑镄 鍙链変粬镊宸辩煡阆 镓浠ヤ缭璇佷简瀹夊叏
RSA链澶х殑瀹夊叏闂棰樻槸 n镄勫垎瑙 鍙瑕佹妸n鍒呜В涓簆*q 鍒橬=锛坧-1锛夛纸q-1锛
镙规嵁 e*d=1锛坢od N锛 灏卞彲浠ラ氲繃e绠楀嚭d 闾d箞绉侀挜閮借浜虹畻鍑烘潵浜 涔熷氨娌″畨鍏ㄦц岃█浜
涓嶈繃鍙𨱍灭殑鏄 澶ф暟鍒呜В鏄涓涓鍗曞悜镄勫嚱鏁 浣犵畻鐭ラ亾p锛宷绠枭寰埚规槗锛屼絾鏄鐭ラ亾n绠楀嚭p锛宷鐩稿綋闅
寮鸿皟涓鍙 n鏄锷犲瘑瑙e瘑鐢ㄧ殑 N鏄鐭ラ亾e绠栀镄
妤间富涔熸病璇翠綘瑕佸共鍢 𨱍崇湅镍傚氨杩欎箞澶
濡傛灉瑕佸疄鐜拌繖涓绠楁硶锛
蹇呴’鐭ラ亾2镣癸细
1.p锛宷杩欎釜涓や釜澶х礌鏁扮殑鐢熸垚锛岃繖鐗垫坛鍒扮礌镐ф楠岋纴鏁拌轰腑鏄涓绔犵殑鍐呭癸纴娌℃硶鍜屼綘灞曞紑
2.鍙栨ā杩愮畻锛岀敱浜庡姞瀵呜В瀵呜繃绋嫔彲鑳藉彇涓涓鏁扮殑鍑犲崄娆℃柟镄勬ā鏁帮纴镓浠ヨ繖涓蹇呴’鐢ㄧ亩渚跨殑绠楁硶𨱒ュ寲瑙e嶆潅搴︼纴涔熷氨鏄妯¢吨澶嶅钩鏂圭畻娉曘
濡傛灉瑕佺紪绋嬩腑浣跨敤锛屽お瀹规槗浜
铡讳笅涓猟ll
鍦╦ava涓 鐩存帴链夊彲鐢ㄤ簬RSA镄勭被 鐩稿綋瀹规槗
E. RSA算法计算
你所说的:
n=20
d=7 公钥
e=3 私钥
对M=3 进行加密
M'=M^d%n (M的d次方,然后除以n取余数)
M'=3^7%20=2187%20=7 加密后等于7
对M'=7进行解密
M=M'^e%n=7^3%20=343%20=3 解密后又变成3了
我空间里面里的一篇文章写的非常清楚,还有例子,想了解清楚点可以再去看看
http://hi..com/lsgo/blog/item/5fd0da24d495666834a80fb8.html
你取的两个素数太小了,所以n太小根本起不了作用。至少要取1024位的数字。