實例分析常用加密算法

因為最近常用到一些加密的技術,所以就把一些常用的加密算法給大家總結了一下。下面我就通過實例,逐一的把常用算法給大家分析一下。

一、RSA加密算法分析

在談RSA加密算法之前,我們需要先了解下兩個專業(yè)名詞,對稱加密和非對稱加密。

對稱加密:含有一個稱為密鑰的東西,在消息發(fā)送前使用密鑰對消息進行加密,在對方收到消息之后,使用相同的密鑰進行解密。

非對稱加密:加密和解密使用不同的密鑰的一類加密算法。這類加密算法通常有兩個密鑰A和B,使用密鑰A加密數(shù)據得到的密文,只有密鑰B可以進行解密操作(即使密鑰A也無法解密),相反,使用了密鑰B加密數(shù)據得到的密文,只有密鑰A可以解密。這兩個密鑰分別稱為私鑰和公鑰,顧名思義,私鑰就是你個人保留,不能公開的密鑰,而公鑰則是公開給加解密操作的另一方的。根據不同用途,對數(shù)據進行加密所使用的密鑰也不相同(有時用公鑰加密,私鑰解密;有時相反用私鑰加密,公鑰解密)。非對稱加密的代表算法是RSA算法。

了解了這兩個名詞下面來講,RSA加密算法。

RSA是目前最有影響力的公鑰加密算法,多用于數(shù)據加密和數(shù)字簽名。雖然有這么大的影響力,但是同時它也有一些弊端,它產生密鑰很麻煩,受到素數(shù)產生技術的限制,因而難以做到一次一密,分組長度太大等。

下面通過實例演示使用RSA加密、解密:

先創(chuàng)建一個全局的CspParameters對象param

加密:

?

private void btnjm_Click(object sender, EventArgs e)

{

param = new CspParameters();

param.KeyContainerName = "Olive";//密匙容器的名稱,保持加密解密一致才能解密成功

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))

{

byte[] plaindata = Encoding.Default.GetBytes(txtyuan.Text);//將要加密的字符串轉換為字節(jié)數(shù)組

byte[] encryptdata = rsa.Encrypt(plaindata, false);//將加密后的字節(jié)數(shù)據轉換為新的加密字節(jié)數(shù)組

txtjiami.Text =Convert.ToBase64String(encryptdata);//將加密后的字節(jié)數(shù)組轉換為字符串

}

}

解密:

?

private void btnjiemi_Click(object sender, EventArgs e)

{

param = new CspParameters();

param.KeyContainerName = "Olive";

using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(param))

{

byte[] encryptdata = Convert.FromBase64String(this.txtjiami.Text);

byte[] decryptdata = rsa.Decrypt(encryptdata, false);

txthjiemi.Text = Encoding.Default.GetString(decryptdata);

}

}

效果如圖:

實例分析常用加密算法

下面我再通過一個實例向大家演示,通過使用RSA加密算法產出公匙和私匙

?

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

using (StreamWriter sw = new StreamWriter(@"D:\PublicKey.xml"))//產生公匙

{

sw.WriteLine(rsa.ToXmlString(false));

}

using (StreamWriter sw = new StreamWriter(@"D:\PrivateKey.xml"))//產生私匙(也包含私匙)

{

sw.WriteLine(rsa.ToXmlString(false));

}

二、DES加密算法分析:

DES加密:使用一個 56 位的密鑰以及附加的 8 位奇偶校驗位,產生最大 64 位的分組大小。這是一個迭代的分組密碼,使用稱為 Feistel 的技術,其中將加密的文本塊分成兩半。使用子密鑰對其中一半應用循環(huán)功能,然后將輸出與另一半進行“異或”運算;接著交換這兩半,這一過程會繼續(xù)下去,但最后一個循環(huán)不交換。DES 使用 16 個循環(huán),使用異或,置換,代換,移位操作四種基本運算。額專業(yè)術語就看看得了,下面直接給大家演示一個小demo,以幫助大家的理解。

先定義一個全局的字節(jié)數(shù)組和實例化一個全局的DESCryptoServiceProvider對象

byte[] buffer;

DESCryptoServiceProvider DesCSP = new DESCryptoServiceProvider();

加密:

?

private void button2_Click(object sender, EventArgs e)

{

MemoryStream ms = new MemoryStream();//先創(chuàng)建 一個內存流

CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateEncryptor(), CryptoStreamMode.Write);//將內存流連接到加密轉換流

StreamWriter sw = new StreamWriter(cryStream);

sw.WriteLine(txtyuan.Text);//將要加密的字符串寫入加密轉換流

sw.Close();

cryStream.Close();

buffer = ms.ToArray();//將加密后的流轉換為字節(jié)數(shù)組

txtjiami.Text =Convert.ToBase64String(buffer);//將加密后的字節(jié)數(shù)組轉換為字符串

}

解密:

?

private void button1_Click(object sender, EventArgs e)

{

MemoryStream ms = new MemoryStream(buffer);//將加密后的字節(jié)數(shù)據加入內存流中

CryptoStream cryStream = new CryptoStream(ms, DesCSP.CreateDecryptor(), CryptoStreamMode.Read);//內存流連接到解密流中

StreamReader sr = new StreamReader(cryStream);

txthjiemi.Text = sr.ReadLine();//將解密流讀取為字符串

sr.Close();

cryStream.Close();

ms.Close();

}

三、MD5加密算法分析

MD5全稱是message-digest algorithm 5,簡單的說就是單向的加密,即是說無法根據密文推導出明文。

MD5加密算法的主要用途:

1、對用戶密碼的加密,

2、在哈希函數(shù)中計算散列值

3、對一段信息生成信息摘要,該摘要對該信息具有唯一性,可以作為數(shù)字簽名。

4、用于驗證文件的有效性(是否有丟失或損壞的數(shù)據),

從上邊的主要用途中我們看到,由于算法的某些不可逆特征,在加密應用上有較好的安全性。通過使用MD5加密算法,我們輸入一個任意長度的字節(jié)串,都會生成一個128位的整數(shù)。所以根據這一點MD5被廣泛的用作密碼加密。下面我用實力給大家演示一下怎樣進行密碼加密。

先看下MD5加密算法實例效果:

實例分析常用加密算法

具體代碼如下:

首先需要引入命名空間:

?

using System.Security;

using System.Security.Cryptography;

private void btnmd5_Click(object sender, EventArgs e)

{

MD5 md5 = new MD5CryptoServiceProvider();

byte[] palindata = Encoding.Default.GetBytes(txtyuan.Text);//將要加密的字符串轉換為字節(jié)數(shù)組

byte[] encryptdata=md5.ComputeHash(palindata);//將字符串加密后也轉換為字符數(shù)組

txtjiami.Text = Convert.ToBase64String(encryptdata);//將加密后的字節(jié)數(shù)組轉換為加密字符串

}

這里我們需要注意的是,不論是在加密的過程中,加密前要將加密字符串轉為字節(jié)數(shù)組,加密后也要生成密文的字節(jié)數(shù)據,然后再轉化為密文。

除了我們以上介紹的幾種常用的加密算法以外,還有AES加密算法,但是AES加密是一個新的可以用于保護電子數(shù)據的加密算法。其產生的密碼是迭代對稱的分組密碼,代加密使用一個循環(huán)結構,在該循環(huán)中重復置換和替換輸入數(shù)據。

小知識之加密算法:

數(shù)據加密的基本過程就是對原來為明文的文件或數(shù)據按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應的密鑰之后才能顯示出本來內容,通過這樣的途徑來達到保護數(shù)據不被非法人竊取、閱讀的目的。 該過程的逆過程為解密,即將該編碼信息轉化為其原來數(shù)據的過程。