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;
            }
    
    
        }
    }
  • 相关阅读:
    读书笔记:A Philosophy of Software Design
    面向对象编程—价值万亿美元的灾难
    刚哥谈架构 (二) 我眼中的架构师
    软件质量成本神话
    API 如何选择 REST,GraphQL还是gRPC
    影响您的代码库的10个编程代码味道
    为什么要不断重构
    php导出excel表格的使用
    浅谈HTTP中Get与Post的区别
    C# 程序配置文件的操作(ConfigurationManager的使用)
  • 原文地址:https://www.cnblogs.com/rinack/p/3672328.html
Copyright © 2011-2022 走看看