一個對稱加密、解密的方法C#工具類

openkk 12年前發布 | 23K 次閱讀 加密 .NET開發

封裝了一個對稱加解密的類,用私鑰和密鑰加解密

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;
    }


}

}</pre>

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!