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