zoukankan      html  css  js  c++  java
  • DES加密解密

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Security.Cryptography;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace PingDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("请输入字符串:");
                var str = Console.ReadLine();
                Console.WriteLine("加密后的字符串:");
                Console.WriteLine(Encrypt(str));
                Console.WriteLine("解密后的字符串:");
                Console.WriteLine(Decrypt(Encrypt(str)));
                Console.ReadLine();
            }
    
            static string encryptKey = "eKey";    //定义密钥  
    
            #region 加密字符串
            /// <summary> /// 加密字符串   
            /// </summary>  
            /// <param name="str">要加密的字符串</param>  
            /// <returns>加密后的字符串</returns>  
            static string Encrypt(string str)
            {
                DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();   //实例化加/解密类对象   
    
                byte[] key = Encoding.Unicode.GetBytes(encryptKey); //定义字节数组,用来存储密钥    
    
                byte[] data = Encoding.Unicode.GetBytes(str);//定义字节数组,用来存储要加密的字符串  
    
                MemoryStream mStream = new MemoryStream(); //实例化内存流对象      
    
                //使用内存流实例化加密流对象   
                CryptoStream cStream = new CryptoStream(mStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
    
                cStream.Write(data, 0, data.Length);  //向加密流中写入数据      
    
                cStream.FlushFinalBlock();              //释放加密流      
    
                return Convert.ToBase64String(mStream.ToArray());//返回加密后的字符串  
            }
            #endregion
    
            #region 解密字符串
            /// <summary>  
            /// 解密字符串   
            /// </summary>  
            /// <param name="str">要解密的字符串</param>  
            /// <returns>解密后的字符串</returns>  
            static string Decrypt(string str)
            {
                DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();   //实例化加/解密类对象    
    
                byte[] key = Encoding.Unicode.GetBytes(encryptKey); //定义字节数组,用来存储密钥    
    
                byte[] data = Convert.FromBase64String(str);//定义字节数组,用来存储要解密的字符串  
    
                MemoryStream mStream = new MemoryStream(); //实例化内存流对象      
    
                //使用内存流实例化解密流对象       
                CryptoStream cStream = new CryptoStream(mStream, descsp.CreateDecryptor(key, key), CryptoStreamMode.Write);
    
                cStream.Write(data, 0, data.Length);      //向解密流中写入数据     
    
                cStream.FlushFinalBlock();               //释放解密流      
    
                return Encoding.Unicode.GetString(mStream.ToArray());       //返回解密后的字符串  
            }
            #endregion
        }
    }

    需要注意的是:CreateDecryptor时,rgbKey必须为8位byte数组,rgbIV必须为大于等于8位byte数组。

    否则会出现“指定键的大小对于此算法无效。”或“指定的初始化向量(IV)与此算法的块大小不匹配。”的错误

  • 相关阅读:
    邱洁红(帮别人名字作诗)
    为了你,我已等了一千年
    为什么才华横溢的人总是怀才不遇
    这三种力量,让你的人生从此大不一样……
    赠中华儿女
    管理的7重境界
    写下你人生101个不可思议的目标
    忙碌啊,请别带走我的诗魂
    宋彦澍(帮别人名字作诗)
    慈善家洛克菲勒先生的思想精华 自信与坚持
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/6025558.html
Copyright © 2011-2022 走看看