C#,目前最好的字符串加密和解密的算法是什么?

如题所述

无所谓什么最好不好,都有一定的局限,你可以加上一些自己的处理,就会比较好了,呵呵,附上我自己用的加密解密方法:
/// <summary>
/// 使用DES加密指定字符串
/// </summary>
/// <param name="encryptStr">待加密的字符串</param>
/// <param name="key">密钥(最大长度8)</param>
/// <param name="IV">初始化向量(最大长度8)</param>
/// <returns>加密后的字符串</returns>
public static string DESEncrypt(string encryptStr,string key,string IV)
{
//将key和IV处理成8个字符
key += "12345678";
IV += "12345678";
key = key.Substring(0,8);
IV = IV.Substring(0,8);

SymmetricAlgorithm sa;
ICryptoTransform ict;
MemoryStream ms;
CryptoStream cs;
byte[] byt;

sa = new DESCryptoServiceProvider();
sa.Key = Encoding.UTF8.GetBytes(key);
sa.IV = Encoding.UTF8.GetBytes(IV);
ict = sa.CreateEncryptor();

byt = Encoding.UTF8.GetBytes(encryptStr);

ms = new MemoryStream();
cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();

cs.Close();

//加上一些干扰字符
string retVal = Convert.ToBase64String(ms.ToArray());
System.Random ra = new Random();

for (int i=0;i<8;i++)
{
int radNum = ra.Next(36);
char radChr = Convert.ToChar(radNum + 65);//生成一个随机字符

retVal = retVal.Substring(0,2*i+1) + radChr.ToString() + retVal.Substring(2*i+1);
}

return retVal;
}

/// <summary>
/// 使用DES解密指定字符串
/// </summary>
/// <param name="encryptedValue">待解密的字符串</param>
/// <param name="key">密钥(最大长度8)</param>
/// <param name="IV">初始化向量(最大长度8)</param>
/// <returns>解密后的字符串</returns>
public static string DESDecrypt(string encryptedValue,string key,string IV)
{
//去掉干扰字符
string tmp = encryptedValue;
if (tmp.Length < 16)
{
return "";
}

for (int i=0;i<8;i++)
{
tmp = tmp.Substring(0,i+1) + tmp.Substring(i+2);
}
encryptedValue = tmp;

//将key和IV处理成8个字符
key += "12345678";
IV += "12345678";
key = key.Substring(0,8);
IV = IV.Substring(0,8);

SymmetricAlgorithm sa;
ICryptoTransform ict;
MemoryStream ms;
CryptoStream cs;
byte[] byt;

try
{
sa = new DESCryptoServiceProvider();
sa.Key = Encoding.UTF8.GetBytes(key);
sa.IV = Encoding.UTF8.GetBytes(IV);
ict = sa.CreateDecryptor();

byt = Convert.FromBase64String(encryptedValue);

ms = new MemoryStream();
cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();

cs.Close();

return Encoding.UTF8.GetString(ms.ToArray());
}
catch (System.Exception)
{
return "";
}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-09-21
//加密字符串函数
static public string Encryption(string str,Random R)
{
/* 加密算法 最长可加密255个字符 */
string md1, md2, pwd = "";
string[] str_t = new string[255];
int l1, l2;
for (int i = 0; i < str.Length; i++)
{
l1 = R.Next(0, 256);
md1 = l1.ToString("X");
if (md1.Length == 1) { md1 = "0" + md1; }

str_t[i] = str.Substring(i, 1);
System.Text.ASCIIEncoding AsciiEncoding = new System.Text.ASCIIEncoding();
l2 = (int)AsciiEncoding.GetBytes(str_t[i])[0];
md2 = (l1 ^ l2).ToString("X");
if (md2.Length == 1) { md2 = "0" + md2; }
pwd = pwd + md1 + md2;
}
return pwd;
}

//解密字符串函数
static public string Decrypt(string str)
{
/* 解密算法 */
string pwd = "";
int xl;
if (str.Length % 4 == 0)
{
xl = str.Length / 4;
string md1, md2;
int l1, l2;
for (int i = 0; i < xl; i++)
{
md1 = str.Substring(i * 4, 2);
md2 = str.Substring(i * 4 + 2, 2);
l1 = int.Parse(md1, System.Globalization.NumberStyles.AllowHexSpecifier);
l2 = int.Parse(md2, System.Globalization.NumberStyles.AllowHexSpecifier);
System.Text.ASCIIEncoding AsciiEncoding = new System.Text.ASCIIEncoding();
byte[] byteArray = new byte[] { (byte)(l1 ^ l2) };
md1 = AsciiEncoding.GetString(byteArray);
pwd = pwd + md1;
}
}
return pwd;
}
第2个回答  2007-09-21
//加密
String str = "this is a test.";
byte[] bytes = Encoding.ASCII.GetBytes(str);

DSACryptoServiceProvider dsac = new DSACryptoServiceProvider();
byte[] sign = dsac.SignData(bytes);
Response.Write(Convert.ToBase64String(sign));

//验证
DSACryptoServiceProvider dsac2 = new DSACryptoServiceProvider();
dsac2.FromXmlString(dsac.ToXmlString(false));
bool ver = dsac2.VerifyData(bytes, sign);
if (ver)
{
Console.WriteLine("通过"+Convert.ToBase64String(sign));
}
else
{
Console.WriteLine("不能通过");
}
相似回答