using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
namespace Ant.Service.Common.CryptHelper
{
public class DESCrypt
{
#region ========算法========
private static string key;//密钥
static DESCrypt()
{
key = System.Configuration.ConfigurationManager.AppSettings["deskey"].ToString();
}
private static byte[] Keys = new byte[] { 0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef };//8个bit位,是DES算法的初始化向量 加解密钥也是8位;
///
/// 解密字符串
///
/// 是要被解密的密文数据
/// DES算法的工作密钥
/// 明文
public static string Decrypt(string decryptString, string decryptKey)
{
try
{
decryptKey = Utils.GetSubString(decryptKey, 8, "");
decryptKey = decryptKey.PadRight(8, ' ');
byte[] bytes = Encoding.UTF8.GetBytes(decryptKey);
byte[] keys = Keys;
byte[] buffer = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, provider.CreateDecryptor(bytes, keys), CryptoStreamMode.Write);
stream2.Write(buffer, 0, buffer.Length);
stream2.FlushFinalBlock();
return Encoding.UTF8.GetString(stream.ToArray());
}
catch
{
return "";
}
}
///
/// 加密
///
/// 要被加密数据
/// DES算法的工作密钥
/// 密文
public static string Encrypt(string encryptString, string encryptKey)
{
encryptKey = Utils.GetSubString(encryptKey, 8, "");
encryptKey = encryptKey.PadRight(8, ' ');
byte[] bytes = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] keys = Keys;
byte[] buffer = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
MemoryStream stream = new MemoryStream();
CryptoStream stream2 = new CryptoStream(stream, provider.CreateEncryptor(bytes, keys), CryptoStreamMode.Write);
stream2.Write(buffer, 0, buffer.Length);
stream2.FlushFinalBlock();
return Convert.ToBase64String(stream.ToArray());//Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节。
//Base64编码可用于在HTTP环境下传递较长的标识信息,如较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数,或者将二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
}
#endregion
#region ========加密========
///
/// 加密
///
///
///
public static string Encrypt(string Text)
{
return Encrypt(Text, key);
}
#endregion
#region ========解密========
///
/// 解密
///
///
///
public static string Decrypt(string Text)
{
return Decrypt(Text, key);
}
#endregion
}
}