/// <summary>
/// Delphi To C# 加密解密类
/// 2010-09-02
/// </summary>
public class Crypt
{
/// <summary>
/// 16进制转字节数组
/// </summary>
/// <param name="hex">16进制字符串</param>
/// <returns>字节数组</returns>
private static byte[] HexToByte(string hex)
{
int L = (int)(hex.Length / 2);
byte[] bytes = new byte[L];

for (int i = 0; i < bytes.Length; i++)
{
try
{
bytes[i] = byte.Parse(hex.Substring(i * 2, 2),
System.Globalization.NumberStyles.HexNumber);
}
catch
{

}
}

return (bytes);
}

/// <summary>
/// 加密函数
/// </summary>
/// <param name="original">需要加密的字符串</param>
/// <param name="key">加密密匙(0..65535)</param>
/// <returns>加密后的字符串</returns>
public static string Encrypt(string original, ushort key)
{
string result = "";

if (original != null && original != string.Empty)
{
byte[] bt = Encoding.Default.GetBytes(original);
byte[] enbt = new byte[bt.Length];

for (int i = 0; i < bt.Length; i++)
{
int k = bt[i] ^ (key >> 8);
enbt[i] = (byte)k;
key = (ushort)(enbt[i] + key);
if (enbt[i] == (char)'\0')
{
enbt[i] = bt[i];
}
}

// 转为16进制
for (int i = 0; i < enbt.Length; i++)
{
result += enbt[i].ToString("X2");
}
}

return (result);
}

/// <summary>
/// 解密函数 (重载)
/// </summary>
/// <param name="original">加密后的字符串</param>
/// <param name="key">解密的密匙(0..65535)</param>
/// <returns>解密后的字符串</returns>
public static string Decrypt(string original, ushort key)
{
if (original == null || original == string.Empty)
{
return original;
}
else
{
byte[] bt = HexToByte(original);
byte[] debt = new byte[bt.Length];

for (int i = 0; i < bt.Length; i++)
{
int k = bt[i] ^ (key >> 8);
debt[i] = (byte)k;
if (debt[i] == (char)'\0')
{
debt[i] = bt[i];
key = (ushort)((byte)(char)'\0' + key);
}
else
{
key = (ushort)(bt[i] + key);
}
}

return (Encoding.Default.GetString(debt));
}
}
}







posted on 2012-02-10 13:18  AAM  阅读(767)  评论(0)    收藏  举报