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)与此算法的块大小不匹配。”的错误

  • 相关阅读:
    iNeuOS工业互联网系统,一键部署,5分钟内开箱即用
    演讲的要义
    在MyBatis中实现动态表名
    Pandora Boot和Spring Boot
    java对象克隆以及深拷贝和浅拷贝
    超级快的端口扫描工具blackwater
    webgl智慧楼宇发光系列之线性采样下高斯模糊
    canvas可视化效果之内阴影效果
    图表绘制之RepeatNode的妙用
    【ECUG】十四年如一日,有这样一群初心不改的技术人
  • 原文地址:https://www.cnblogs.com/zhuyongblogs/p/6025558.html
Copyright © 2011-2022 走看看