对称加密、解密

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


}
}

posted @ 2012-08-18 22:01  Cn.Ruyi  阅读(156)  评论(0)    收藏  举报