纪念一下自己犯过的错,和研究会的地方。
/// <summary>
/// DES加密(输出Base64格式)
/// </summary>
/// <param name="builderIdcard"></param>
/// <returns></returns>
public static string EncryptString(string str)
{
string myKey = Config.Config.builderIdcardMS;
if (myKey.Length < 9)
{
for (;;)
{
if (myKey.Length < 9)
myKey += myKey;
else
break;
}
}
string encryptKey = myKey.Substring(0, 8);
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider(); //实例化加/解密类对象
descsp.Mode = CipherMode.CBC;
descsp.Padding = PaddingMode.PKCS7;
byte[] key = Encoding.UTF8.GetBytes(encryptKey); //定义字节数组,用来存储密钥
byte[] data = Encoding.UTF8.GetBytes(str);//定义字节数组,用来存储要加密的字符串
MemoryStream MStream = new MemoryStream(); //实例化内存流对象
//使用内存流实例化加密流对象
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateEncryptor(key, key), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length); //向加密流中写入数据
CStream.FlushFinalBlock(); //释放加密流
return Convert.ToBase64String(MStream.ToArray()).Replace("+", "%2B");//返回加密后的字符串
}
/// <summary>
/// DES加密(输出Hex格式)
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string Encrypt(string str)
{
string sKey = "8c2da4c769828fcfa77aedb690999cf9";
if (sKey.Length < 9)
{
for (;;)
{
if (sKey.Length < 9)
sKey += sKey;
else
break;
}
}
string encryptKey = sKey.Substring(0, 8);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.PKCS7;
byte[] inputByteArray;
inputByteArray = Encoding.UTF8.GetBytes(str);
byte[] key = Encoding.UTF8.GetBytes(encryptKey);
//byte[] data = Encoding.UTF8.GetBytes(str);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(key,key), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}