天天看点

数据加密标准(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)

继续阅读