zoukankan      html  css  js  c++  java
  • 一个对称加密、解密的方法C#工具类

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.Security.Cryptography;
    
    namespace CMD.EDI
    {
        public class EncryptHandler
        {
            /// <summary>
            /// 加密字符串
            /// </summary>
            public static string Encrypt(string password, string cleartext)
            {
                string password2 = "Ahbool";
    
                string cipher;
                char[] key = new char[8];
                if (password.Length > 8)
                {
                    password = password.Remove(8);
                }
                password.CopyTo(0, key, 0, password.Length);
    
                char[] iv = new char[8];
                if (password2.Length > 8)
                {
                    password2 = password2.Remove(8);
                }
                password2.CopyTo(0, iv, 0, password2.Length);
    
                if (cleartext == null)
                {
                    return string.Empty;
                }
    
                SymmetricAlgorithm serviceProvider = new DESCryptoServiceProvider();
                serviceProvider.Key = Encoding.ASCII.GetBytes(key);
                serviceProvider.IV = Encoding.ASCII.GetBytes(iv);
    
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream, serviceProvider.CreateEncryptor(), CryptoStreamMode.Write);
                StreamWriter streamWriter = new StreamWriter(cryptoStream);
    
                streamWriter.Write(cleartext);
                streamWriter.Dispose();
                cryptoStream.Dispose();
    
                byte[] signData = memoryStream.ToArray();
                memoryStream.Dispose();
                serviceProvider.Clear();
                cipher = Convert.ToBase64String(signData);
    
                return cipher;
            }
    
            /// <summary>
            /// 解密字符串
            /// </summary>
            public static string Decrypt(string password, string ciphertext)
            {
                string password2 = "Ahbool";
    
                string cipher = string.Empty;
    
                try
                {
                    char[] key = new char[8];
                    if (password.Length > 8)
                    {
                        password = password.Remove(8);
                    }
                    password.CopyTo(0, key, 0, password.Length);
    
                    char[] iv = new char[8];
                    if (password2.Length > 8)
                    {
                        password2 = password2.Remove(8);
                    }
                    password2.CopyTo(0, iv, 0, password2.Length);
    
                    if (ciphertext == null)
                    {
                        return cipher;
                    }
    
                    SymmetricAlgorithm serviceProvider = new DESCryptoServiceProvider();
                    serviceProvider.Key = Encoding.ASCII.GetBytes(key);
                    serviceProvider.IV = Encoding.ASCII.GetBytes(iv);
    
                    byte[] contentArray = Convert.FromBase64String(ciphertext);
                    MemoryStream memoryStream = new MemoryStream(contentArray);
                    CryptoStream cryptoStream = new CryptoStream(memoryStream, serviceProvider.CreateDecryptor(), CryptoStreamMode.Read);
                    StreamReader streamReader = new StreamReader(cryptoStream);
    
                    cipher = streamReader.ReadToEnd();
    
                    streamReader.Dispose();
                    cryptoStream.Dispose();
                    memoryStream.Dispose();
                    serviceProvider.Clear();
    
                }
                catch (Exception ex)
                {
                    throw new SystemException("密钥错误,数据包解密失败.");
                }
    
                return cipher;
            }
    
    
        }
    }
  • 相关阅读:
    局域网中配置多台机器可以登录远程桌面
    集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解
    C#只允许运行应用程序的一个实例的正确写法
    windows快捷启动命令
    .Net中的Attribute
    NAnt学习笔记(1) NAnt的配置文件结构和一个简单的NAnt例子
    互联网项目管理要点(转)
    .net中的对象序列化(2):三种序列化方式
    NAnt学习笔记(2) 节点的含义解释
    如何在修改checkbox状态,不触发事件
  • 原文地址:https://www.cnblogs.com/gc2013/p/3682997.html
Copyright © 2011-2022 走看看