把一些加密解密的代碼,簡單整理成一個類,做了一個加密解密的小工具,可以實現MD5加密,DES加密解密,RSA加密解密。
使用的是 System.Security.Cryptography; 命名空間提供的相關類。
RSA加密算法:
RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
公鑰與私鑰的產生
假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰:
隨意選擇兩個大的質數p和q,p不等于q,計算N=pq。
根據歐拉函數,求得r= φ(N) = φ(p)φ(q) = (p-1)(q-1)
選擇一個小于r的整數e,求得e關于模r的模反元素,命名為d。(模反元素存在,當且僅當e與r互質)
將p和q的記錄銷毀。
(N,e)是公鑰,(N,d)是私鑰。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。
加密消息
假設Bob想給Alice送一個消息m,他知道Alice產生的N和e。他使用起先與Alice約好的格式將m轉換為一個小于N的整數n,比如他可以將每一個字轉換為這個字的Unicode碼,然后將這些數字連在一起組成一個數字。假如他的信息非常長的話,他可以將這個信息分為幾段,然后將每一段轉換為n。用下面這個公式他可以將n加密為c:
n^e \equiv c\ (\mathrm{mod}\ N)
計算c并不復雜。Bob算出c后就可以將它傳遞給Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密鑰d來解碼。她可以用以下這個公式來將c轉換為n:
c^d \equiv n\ (\mathrm{mod}\ N)
得到n后,她可以將原來的信息m重新復原。
解碼的原理是
c^d \equiv n^{e \cdot d}\ (\mathrm{mod}\ N)
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由費馬小定理可證明(因為p和q是質數)
n^{e \cdot d} \equiv n\ (\mathrm{mod}\ p) 和 n^{e \cdot d} \equiv n\ (\mathrm{mod}\ q)
這說明(因為p和q是不同的質數,所以p和q互質)
n^{e \cdot d} \equiv n\ (\mathrm{mod}\ pq)