![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuMzM1YzM3YWYjVmNmBTZ4MzMlFGN4UjNiRjY4EjY1ADNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
/**//*
* 資料加密标準(DES)的C#實作(1)
*
* 采用随機的密鑰Key和初始化向量IV加密
* 夏春濤 Email:[email protected]
* Blog:http://bluesky521.cnblogs.com
* 運作環境:.net2.0 framework
*/
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuMzM1YzM3YWYjVmNmBTZ4MzMlFGN4UjNiRjY4EjY1ADNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
/**//*
* 關于DES加密中的初始化向量IV:
* 對于給定的密鑰 k,不使用初始化向量的簡單塊密碼将同一個純文字輸入塊加密為
* 同一個密碼文本輸出塊。如果您的純文字流中有重複塊,則您的密碼文本流中也會
* 有重複塊。如果未經授權的使用者知道了您的純文字塊結構的任何資訊,他們就可以
* 利用該資訊來解密已知的密碼文本塊,并有可能重新獲得您的密鑰。為了防止這個
* 問題,前一個塊中的資訊被混合到下一個塊的加密過程中。這樣一來,兩個相同的
* 純文字塊的輸出就變得不一樣了。由于此技術使用前一個塊加密下一個塊,是以需
* 要初始化向量來加密資料的第一個塊。
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace DES_App1
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuMzM1YzM3YWYjVmNmBTZ4MzMlFGN4UjNiRjY4EjY1ADNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
{
class Program
static void Main(string[] args)
DESCryptoServiceProvider des_csp = new DESCryptoServiceProvider();
string str_plain_text = "How are you?";
Console.WriteLine("原文:" + str_plain_text);
string str_cypher_text = Encrypt(str_plain_text, des_csp);
Console.WriteLine("密文:" + str_cypher_text);
Console.WriteLine("解密:" + Decrypt(str_cypher_text, des_csp));
Console.WriteLine("本次密鑰:" + Convert.ToBase64String(des_csp.Key));
Console.WriteLine("本次初始化向量:" + Convert.ToBase64String(des_csp.IV));
Console.WriteLine();
}
//加密一個明文字元串,傳回一個Base64String密文字元串
//SymmetricAlgorithm:表示所有對稱算法的實作都必須從中繼承的抽象基類
static public string Encrypt(string PlainText, SymmetricAlgorithm des_csp)
MemoryStream ms = new MemoryStream();
CryptoStream encStream = new CryptoStream(ms, des_csp.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(encStream);
sw.WriteLine(PlainText);
sw.Close();
encStream.Close();
byte[] buffer = ms.ToArray();
ms.Close();
string str_cypher_text = Convert.ToBase64String(buffer);
return str_cypher_text;
//解密一個Base64String密文字元串,傳回一個明文字元串
static public string Decrypt(string str_cypher_text, SymmetricAlgorithm des_csp)
byte[] CypherText = Convert.FromBase64String(str_cypher_text);
MemoryStream ms = new MemoryStream(CypherText);
CryptoStream encStream = new CryptoStream(ms, des_csp.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(encStream);
string val = sr.ReadLine();
sr.Close();
return val;
}
}