天天看點

資料加密标準(DES)的C#實作(1)

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

/**//*

資料加密标準(DES)的C#實作(1)

 * 資料加密标準(DES)的C#實作(1)

資料加密标準(DES)的C#實作(1)

 * 

資料加密标準(DES)的C#實作(1)

 * 采用随機的密鑰Key和初始化向量IV加密

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

 * 夏春濤 Email:[email protected] 

資料加密标準(DES)的C#實作(1)

 * Blog:http://bluesky521.cnblogs.com

資料加密标準(DES)的C#實作(1)

 * 運作環境:.net2.0 framework

資料加密标準(DES)的C#實作(1)

 */

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

/**//* 

資料加密标準(DES)的C#實作(1)

 * 關于DES加密中的初始化向量IV:

資料加密标準(DES)的C#實作(1)

 * 對于給定的密鑰 k,不使用初始化向量的簡單塊密碼将同一個純文字輸入塊加密為

資料加密标準(DES)的C#實作(1)

 * 同一個密碼文本輸出塊。如果您的純文字流中有重複塊,則您的密碼文本流中也會

資料加密标準(DES)的C#實作(1)

 * 有重複塊。如果未經授權的使用者知道了您的純文字塊結構的任何資訊,他們就可以

資料加密标準(DES)的C#實作(1)

 * 利用該資訊來解密已知的密碼文本塊,并有可能重新獲得您的密鑰。為了防止這個

資料加密标準(DES)的C#實作(1)

 * 問題,前一個塊中的資訊被混合到下一個塊的加密過程中。這樣一來,兩個相同的

資料加密标準(DES)的C#實作(1)

 * 純文字塊的輸出就變得不一樣了。由于此技術使用前一個塊加密下一個塊,是以需

資料加密标準(DES)的C#實作(1)

 * 要初始化向量來加密資料的第一個塊。 

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

using System;

資料加密标準(DES)的C#實作(1)

using System.Collections.Generic;

資料加密标準(DES)的C#實作(1)

using System.Text;

資料加密标準(DES)的C#實作(1)

using System.Security.Cryptography;

資料加密标準(DES)的C#實作(1)

using System.IO;

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

namespace DES_App1

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

{

資料加密标準(DES)的C#實作(1)

    class Program

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

        static void Main(string[] args)

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            DESCryptoServiceProvider des_csp = new DESCryptoServiceProvider();

資料加密标準(DES)的C#實作(1)

            string str_plain_text = "How are you?";

資料加密标準(DES)的C#實作(1)

            Console.WriteLine("原文:" + str_plain_text);

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            string str_cypher_text = Encrypt(str_plain_text, des_csp);

資料加密标準(DES)的C#實作(1)

            Console.WriteLine("密文:" + str_cypher_text);

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            Console.WriteLine("解密:" + Decrypt(str_cypher_text, des_csp));

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            Console.WriteLine("本次密鑰:" + Convert.ToBase64String(des_csp.Key));

資料加密标準(DES)的C#實作(1)

            Console.WriteLine("本次初始化向量:" + Convert.ToBase64String(des_csp.IV));

資料加密标準(DES)的C#實作(1)

            Console.WriteLine();

資料加密标準(DES)的C#實作(1)

        }

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

        //加密一個明文字元串,傳回一個Base64String密文字元串

資料加密标準(DES)的C#實作(1)

        //SymmetricAlgorithm:表示所有對稱算法的實作都必須從中繼承的抽象基類

資料加密标準(DES)的C#實作(1)

        static public string Encrypt(string PlainText, SymmetricAlgorithm des_csp)

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            MemoryStream ms = new MemoryStream();

資料加密标準(DES)的C#實作(1)

            CryptoStream encStream = new CryptoStream(ms, des_csp.CreateEncryptor(), CryptoStreamMode.Write);

資料加密标準(DES)的C#實作(1)

            StreamWriter sw = new StreamWriter(encStream);

資料加密标準(DES)的C#實作(1)

            sw.WriteLine(PlainText);

資料加密标準(DES)的C#實作(1)

            sw.Close();

資料加密标準(DES)的C#實作(1)

            encStream.Close();

資料加密标準(DES)的C#實作(1)

            byte[] buffer = ms.ToArray();

資料加密标準(DES)的C#實作(1)

            ms.Close();

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            string str_cypher_text = Convert.ToBase64String(buffer);

資料加密标準(DES)的C#實作(1)

            return str_cypher_text;

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

        //解密一個Base64String密文字元串,傳回一個明文字元串

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

        static public string Decrypt(string str_cypher_text, SymmetricAlgorithm des_csp)

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            byte[] CypherText = Convert.FromBase64String(str_cypher_text);

資料加密标準(DES)的C#實作(1)

            MemoryStream ms = new MemoryStream(CypherText);

資料加密标準(DES)的C#實作(1)

            CryptoStream encStream = new CryptoStream(ms, des_csp.CreateDecryptor(), CryptoStreamMode.Read);

資料加密标準(DES)的C#實作(1)

            StreamReader sr = new StreamReader(encStream);

資料加密标準(DES)的C#實作(1)

            string val = sr.ReadLine();

資料加密标準(DES)的C#實作(1)

            sr.Close();

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

            return val;

資料加密标準(DES)的C#實作(1)
資料加密标準(DES)的C#實作(1)

    }

資料加密标準(DES)的C#實作(1)

}

資料加密标準(DES)的C#實作(1)

繼續閱讀