数据加密标准(DES)的C#实现(1)

/*
 * 数据加密标准(DES)的C#实现(1)
 * 
 * 采用随机的密钥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_App1
{
    
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密文字符串,返回一个明文字符串
        
//SymmetricAlgorithm:表示所有对称算法的实现都必须从中继承的抽象基类
        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();
            encStream.Close();
            ms.Close();

            
return val;
        }

    }

}

源码附件:/Files/bluesky521/DES_Hash_Demo.rar

原文地址:https://www.cnblogs.com/SummerRain/p/1005556.html