公鑰加密演算法 也叫非對稱加密,它在加密和解密時使用的是不同的密鑰,具有這樣的特徵:
最常見的公鑰加密演算法是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位的數字。