MiniDes.cs
public class MiniDes
...{
public MiniDes()
...{
//
// TODO: Add constructor logic here
//
}
private static string sKey
...{
get
...{
return Key.MiniDesKey;
}
}
//矢量
private const string sIV = "qcDd6X+aPLa=";

/**//// <summary>
/// 3DES加密
/// </summary>
/// <param name= "Value "> 待加密字符串 </param>
/// <param name= "sKey "> 密钥 </param>
/// <param name= "sIV "> 矢量 </param>
/// <returns> 加密后字符串 </returns>
public static string Encrypt(string Value)
...{
try
...{
//构造对称算法
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
//指定加密的运算模式
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch
...{
return "";
}
}

/**//// <summary>
/// 3DES解密
/// </summary>
/// <param name= "Value "> 待解密字符串 </param>
/// <param name= "sKey "> 密钥 </param>
/// <param name= "sIV "> 矢量 </param>
/// <returns> 解密后字符串 </returns>
public static string Decrypt(string Value)
...{
try
...{
//构造对称算法
SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
mCSP.Key = Convert.FromBase64String(sKey);
mCSP.IV = Convert.FromBase64String(sIV);
mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);
byt = Convert.FromBase64String(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
catch
...{
return "";
}
}
}key.cs
public class Key
...{
public Key()
...{
//
// TODO: Add constructor logic here
//
}
//des密钥 32位
public static string MiniDesKey
...{
get
...{
return "qJzGEh6hESZDVgeCnFPGuxzaiB7NLQM2";
}
}
}CodeSign.cs
public class CodeSign
...{
public CodeSign()
...{
}
//返回原加密字符串
public static string GetData(string signstr)
...{
try
...{
string _tempsignstr = signstr.Substring(signstr.IndexOf('A') + 1);
int randomstrlen = int.Parse(signstr.Substring(signstr.IndexOf('A') + 1, signstr.IndexOf('B') - signstr.IndexOf('A') - 1));
string wholestr = signstr.Substring(signstr.IndexOf('B') + 1);
string _temp1str = signstr.Substring(signstr.IndexOf('B') + 1, (wholestr.Length - randomstrlen) / 2);
string _temp2str = signstr.Substring(signstr.IndexOf('B') + 1 + _temp1str.Length + randomstrlen);
string _tempstr = _temp1str + _temp2str;
string _temprandom = signstr.Substring(signstr.IndexOf('B') + 1 + _temp1str.Length, randomstrlen);
byte[] byrandom = Convert.FromBase64String(_temprandom);
for (int i = 0; i < byrandom.Length; i++)
...{
byrandom[i] = (byrandom[i] ^= (byte)10);
}
byte[] bystr = Convert.FromBase64String(_tempstr);
for (int i = 0; i < bystr.Length; i++)
...{
bystr[i] = (bystr[i] ^= byrandom[i]);
}
string oldstr = Encoding.UTF8.GetString(bystr);
return oldstr;
}
catch
...{
return "";
}
}
//签名 ascii(A后的数))+A+(随即数^10.length+B+str^随即数+随即数^10(插入在str^随即数/2处))
public static string AddSign(string str)
...{
try
...{
byte[] bystr = Encoding.UTF8.GetBytes(str);
string randomstr = GetRandomStr(bystr.Length);
byte[] byrandom = Encoding.UTF8.GetBytes(randomstr);
for (int i = 0; i < bystr.Length; i++)
...{
bystr[i] = (bystr[i] ^= byrandom[i]);
}
string signstr = Convert.ToBase64String(bystr);
for (int i = 0; i < byrandom.Length; i++)
...{
byrandom[i] = (byrandom[i] ^= (byte)10);
}
string _temprandom = Convert.ToBase64String(byrandom);
string _temp1str = signstr.Substring(0, signstr.Length / 2);
string _temp2str = signstr.Substring(signstr.Length / 2);
signstr = _temprandom.Length + "B" + _temp1str + _temprandom + _temp2str;
string _tempASCII = ToASCII(signstr);
return _tempASCII + "A" + signstr;
}
catch
...{
return "";
}
}
//验签
public static bool CheckSign(string signstr)
...{
try
...{
if (!string.IsNullOrEmpty(signstr))
...{
string _tempASCII = signstr.Substring(0, signstr.IndexOf('A'));
string _tempsignstr = signstr.Substring(signstr.IndexOf('A') + 1);
if (int.Parse(_tempASCII) == int.Parse(ToASCII(_tempsignstr)))
...{
return true;
}
}
}
catch
...{
return false;
}
return false;
}
//求一个string的ASCII码之和
public static string ToASCII(string str)
...{
int _tempint = 0;
byte[] by = Encoding.ASCII.GetBytes(str);
for (int i = 0; i < by.Length; i++)
...{
_tempint += by[i];
}
return _tempint.ToString();
}
public static string GetRandomStr(int codeCount)
...{
string allChar = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -1;
Random rand = new Random();
for (int i = 0; i < codeCount; i++)
...{
if (temp != -1)
...{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));//随时间生成
}
int t = rand.Next(25);
//如果重复了则重新生成
//if (temp == t)
//{
// return GetRandomStr(codeCount);
//}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
}
}
本文介绍了如何在C#中使用MiniDes.cs库进行加密和解密操作,以及CodeSign.cs文件中阐述的签名与验签方法,详细讲解了加密解密和签名验证的关键步骤。
446

被折叠的 条评论
为什么被折叠?



