今天幫同學做課程設計,寫了一天代碼。
題目: 編寫一個加密的即時通訊程序(難度系數0.8)
被困擾在加密的算法中,開始想用RSA算法,因為RSA加密算法 是另外一個題目。。可以順便再幫另外一個同學寫一下,,結果搞了半天發現RSA用來加密即使通訊消息不太合適,,
至少以我的能力寫不出一個速度很快的加密解密函數,既然是即使通訊工具,速度慢的和蝸牛似的還通訊個P,,
不過其間查了大量資料對RSA算法的特性有了一定的了解,其主要難度在于大數的計算,這個計算真不是一般的麻煩,想到這里覺得自己的數學功底太弱了
搜了那么多資料現在還能記起來的比較實用的一個公式是:NR mod D = ( ( N mod D )R ) mod D
在CSDN某人的博客上看到的,里面還有很多推論地址:http://blog.csdn.net/fireseed/archive/2005/03/23/327444.aspx
后來選擇了DEC加密算法,代碼來至某博客,。忘記哪里弄來的了。
代碼如下:

public string JiaMi(string pToEncrypt,string KeyWord)

{
DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte數組中

byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
//byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

des.Key = ASCIIEncoding.ASCII.GetBytes(KeyWord); //建立加密對象的密鑰和偏移量
des.IV = ASCIIEncoding.ASCII.GetBytes(KeyWord); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法
MemoryStream ms = new MemoryStream(); //使得輸入密碼必須輸入英文文本
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())

{
ret.AppendFormat("{0:X2}", b);
}
//ret.ToString();
return ret.ToString();
}
//DEC 解密過程
public string JieMi(string pToDecrypt,string KeyWord)

{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();

byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
for (int x = 0; x < pToDecrypt.Length / 2; x++)

{
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}

des.Key = ASCIIEncoding.ASCII.GetBytes(KeyWord); //建立加密對象的密鑰和偏移量,此值重要,不能修改
des.IV = ASCIIEncoding.ASCII.GetBytes(KeyWord);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);

cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();

StringBuilder ret = new StringBuilder(); //建立StringBuild對象,CreateDecrypt使用的是流對象,必須把解密后的文本變成流對象

return System.Text.Encoding.Default.GetString(ms.ToArray());
}

//傳進來的參數就是你要加密的那個字符串和密鑰
后來還看了MD5加密算法,主要是想搞一個注冊登錄,用來加密用戶密碼。
在查資料的過程中在CSDN某人的博客上看到一條有趣的信息,寫的是某MD5破解網站的廣告,大概的意思就是,他們那個網站把所有手機號碼,生日,以及幾位的數字和字母的所有組合的MD5碼都計算出來了,總共有256億條信息好像。。還在不斷的增長當中,可怕的信息,。,這樣一來如果得到MD5加密碼,一般的用戶密碼都能找出來了。。
看來算法一旦公布就算是銅墻鐵壁也有人會拼死去撞,,真可怕
搞了半天自己的課程設計都沒有寫好,趕緊去搞定~~
posted on 2011-06-22 17:11
mr_chen 閱讀(461)
評論(0) 編輯 收藏 引用 所屬分類:
加密解密