using System;
|
using System.Text;
|
using System.Security.Cryptography;
|
using System.IO;
|
|
namespace Shared.Encryption
|
{
|
public class DES
|
{
|
//<summary><![CDATA[字符串DES加密函数]]></summary>
|
//<param name="str"><![CDATA[被加密字符串 ]]></param>
|
//<param name="key"><![CDATA[密钥 ]]></param>
|
//<returns><![CDATA[加密后字符串,error开头表示错误]]></returns>
|
public static string Encode(string str, string key)
|
{
|
try
|
{
|
var provider = new DESCryptoServiceProvider();
|
provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
|
provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
|
var bytes = Encoding.UTF8.GetBytes(str);
|
using (var stream = new MemoryStream())
|
{
|
var stream2 = new CryptoStream(stream, provider.CreateEncryptor(), CryptoStreamMode.Write);
|
stream2.Write(bytes, 0, bytes.Length);
|
stream2.FlushFinalBlock();
|
var builder = new StringBuilder();
|
foreach (byte num in stream.ToArray())
|
{
|
builder.AppendFormat("{0:X2}", num);
|
}
|
return builder.ToString();
|
}
|
}
|
catch (Exception)
|
{
|
return "error:加密失败!";
|
}
|
}
|
|
//<summary><![CDATA[字符串DES解密函数]]></summary>
|
//<param name="str"><![CDATA[被解密字符串 ]]></param>
|
//<param name="key"><![CDATA[密钥 ]]></param>
|
//<returns><![CDATA[解密后字符串,error开头是出错]]></returns>
|
public static string Decode(string str, string key)
|
{
|
try
|
{
|
var provider = new DESCryptoServiceProvider();
|
// 密钥
|
provider.Key = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
|
// 偏移量
|
provider.IV = Encoding.ASCII.GetBytes(key.Substring(0, key.Length < 8 ? key.Length : 8));
|
var buffer = new byte[str.Length / 2];
|
for (int i = 0; i < (str.Length / 2); i++)
|
{
|
int num2 = Convert.ToInt32(str.Substring(i * 2, 2), 0x10);
|
buffer[i] = (byte)num2;
|
}
|
using (var stream = new MemoryStream())
|
{
|
var stream2 = new CryptoStream(stream, provider.CreateDecryptor(), CryptoStreamMode.Write);
|
stream2.Write(buffer, 0, buffer.Length);
|
stream2.FlushFinalBlock();
|
stream.Close();
|
return Encoding.UTF8.GetString(stream.ToArray());
|
}
|
}
|
catch (Exception)
|
{
|
return "error:解密失败!";
|
}
|
}
|
}
|
}
|