?? program.cs
字號:
?/*
* 數據加密標準(DES)的C#實現(4)
*
* 采用自定義的密鑰Key和初始化向量IV加密
*
* 夏春濤 Email:xChuntao@163.com
* Blog:http://bluesky521.cnblogs.com
* 運行環境:.net2.0 framework
*/
/*
* 關于DES加密中的初始化向量IV:
* 對于給定的密鑰 k,不使用初始化向量的簡單塊密碼將同一個純文本輸入塊加密為
* 同一個密碼文本輸出塊。如果您的純文本流中有重復塊,則您的密碼文本流中也會
* 有重復塊。如果未經授權的用戶知道了您的純文本塊結構的任何信息,他們就可以
* 利用該信息來解密已知的密碼文本塊,并有可能重新獲得您的密鑰。為了防止這個
* 問題,前一個塊中的信息被混合到下一個塊的加密過程中。這樣一來,兩個相同的
* 純文本塊的輸出就變得不一樣了。由于此技術使用前一個塊加密下一個塊,因此需
* 要初始化向量來加密數據的第一個塊。
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace DES_App4
{
class Program
{
static void Main(string[] args)
{
string str_plain_text = "How are you?";//原文
Console.WriteLine("原文:" + str_plain_text);
string KEY_64 = "a4G-8=Jk"; //必須是8個字符(64Bit)
string IV_64 = "JKbN=5[?"; //必須8個字符(64Bit)
Console.WriteLine("密鑰:" + KEY_64);
Console.WriteLine("初始化向量:" + IV_64);
//----
string str_cypher_text = Encrypt(str_plain_text, KEY_64, IV_64);
Console.WriteLine("密文:" + str_cypher_text);
Console.WriteLine("解密:" + Decrypt(str_cypher_text, KEY_64, IV_64) );
Console.WriteLine();
}
static public string Encrypt(string PlainText, string KEY_64, string IV_64)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(PlainText);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
static public string Decrypt(string CypherText, string KEY_64, string IV_64)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
byte[] byEnc;
try
{
byEnc = Convert.FromBase64String(CypherText);
}
catch
{
return null;
}
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(byEnc);
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
StreamReader sr = new StreamReader(cst);
return sr.ReadToEnd();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -