zoukankan      html  css  js  c++  java
  • 数据加密标准(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

  • 相关阅读:
    手机也需“绿色环保”,省电类APP或将成为“标配”?
    Netty入门实例及分析
    ios开发经常使用RGB色值
    poj Kaka's Matrix Travels
    C++ 继承体系中的名称覆盖
    spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
    Codeforces Round #131 Div1 B
    URAL 1837. Isenbaev's Number (map + Dijkstra || BFS)
    数据库升级代码学习
    delphi:临界区对象TCriticalSection(Delphi) 与 TRtlCriticalSection 的区别
  • 原文地址:https://www.cnblogs.com/SummerRain/p/1005556.html
Copyright © 2011-2022 走看看