class Encrypt
{
//using System.Security.Cryptography
//using System.IO
private static int[] mKey;
private static string tmp;
/// <summary>
/// 解密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Decrypt(string str)
{
if (!string.IsNullOrEmpty(str))
{
int i = 0;
int pos = 0;
string AdjPos = "";
string data = "";
string[] DataArry = new string[100];
int cnt = 0;
tmp = "";
Let("Quanta");
cnt = (short)Convert.ToChar((str.Substring(0, 1))) - 35;
AdjPos = str.Substring(1, cnt);
data = str.Substring(cnt + 1);
for (i = 0; i < cnt; i++)
{
pos = (short)Convert.ToChar((AdjPos.Substring(i, 1))) - 35;
data = data.Substring(0, pos - 1) + (char)((short)Convert.ToChar(data.Substring(pos - 1, 1)) - 35) + data.Substring(pos);
}
for (i = 0; i < data.Length; i++)
{
tmp = tmp + (char)(((short)Convert.ToChar(data.Substring(i, 1)) ^ mKey[(i + 1) % 31]));
}
return tmp;
}
else
return string.Empty;
}
/// <summary>
/// 加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string EncryptString(string str)
{
if (!string.IsNullOrEmpty(str))
{
string AdjPos = "";
short code;
Int16 cnt = 0;
Let("Quanta");
tmp = "";
for (int i = 0; i < str.Length; i++)
{
code = (short)((short)Convert.ToChar(str.Substring(i, 1)) ^ mKey[(i + 1) % 31]);
if (code < 35)
{
//skip ASC 1~35
code += 35;
cnt += 1;
AdjPos = AdjPos + (char)(35 + i + 1);
}
tmp = tmp + (char)(code);
}
//skip ASC 1~35
return ((char)(35 + cnt)) + AdjPos + tmp;
}
else
return string.Empty;
}
/// <summary>
/// 秘钥
/// </summary>
/// <param name="str"></param>
private static void Let(string str)
{
int i = 0;
int mSeed = 0;
mKey = new int[31];
//str = "Quanta";
for (i = 0; i < str.Length; i++)
{
mSeed = mSeed + (((short)(Convert.ToChar(str.Substring(i, 1)))) * (i + 1)) % 177;
}
for (i = 0; i < 31; i++)
{
mKey[i] = (mSeed * i) % (128 - i);
}
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="input">待加密的字符串</param>
/// <returns></returns>
public static string DesEncrypt(string EncryptString)
{
byte[] inputByteArray = Encoding.UTF8.GetBytes(EncryptString);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
des.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="DecryptString">待解密的字符串</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DesDecrypt(string DecryptString)
{
try
{
byte[] inputByteArray = Convert.FromBase64String(DecryptString);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
des.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return "";
}
}
}
文章评论 本文章有个评论