• 一个对称加密、解密的方法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;
            }
    
    
        }
    }
  • 相关阅读:
    dd是___元素
    【电商8】footer mod_service
    外边距塌陷问题
    隐藏display: ____;
    判断一个32位的整数的二进制有几个1
    8 switch case
    键盘录入
    两个整数的交换
    运算符
    java 异常报错总结
  • 原文地址:https://www.cnblogs.com/rinack/p/3672328.html
Copyright © 2020-2023  润新知