//简单加密,所有字符对应唯一加密字符,在穷举法面前不堪一击。使用随机且足够长的秘钥能提高安全系数
public string str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//任意一串字符串,不要有重复的字符
public string str2 = "";
//初始化加密器
public void InitKey(string key)
{
List<char> tempStr = new List<char>();
for(int i=0;i<key.length;i++)
{
if(!tempStr.Contains(key[i])
tempStr.add(key[i]);
}
for(int j=0;j<str1.length;j++)
{
if(!tempStr.Contains(str1[j])
tempStr.add(str1[j]);
}
string str2 = tempStr.ToString();
}
//加密
public string GetEncryptedStr(string ClearStr)
{
string encryptedStr = "";
for(int i=0;k<ClearStr.length;i++)
{
if(str1.Contains(ClearStr[i]))
encryptedStr+=str2[str1.IndexOf(ClearStr[i])];
else
encryptedStr+=ClearStr[i];
}
return encryptedStr;
}
//解密
public string GetClearStr(string EncryptedStr)
{
string clearStr="";
for(int i=0;i<EncryptedStr.length;i++)
{
if(str2.Contains(EncryptedStr[i]))
clearStr+=str1[str2.IndexOf(EncryptedStr[i])];
else
clearStr+=EncryptedStr[i];
}
return clearStr;
}
//哈希不可逆加密多用于密码验证
public static string HashEncoding(string Security)
{
byte[] Value;
UTF8Encoding Code = new UTF8Encoding();
byte[] Message = Code.GetBytes(Security);
//这里当然有多种长度可以选择,不一定非要256位哈
SHA256Managed Arithmetic = new SHA256Managed();
Value = Arithmetic.ComputeHash(Message);
Security = "";
foreach (byte o in Value)
{
Security += o.ToString("x2");
}
return Security;
}
当然了,这里的哈希是没有加盐的
若要加盐,要么对每个用户随机生成盐值,就是一段字符串。并且要明文保存起来,在验证的时候拿来用;要么选择现有的(数据库中某地方已经保存的)字符串(条件:不会被修改,较长(这个可以处理))作为盐值,拼到密码里面再加密。这样的好处是就算有部分人密码一样(对付那些懒得改初始密码或喜欢用简单密码的人),他们的密码在哈希后也是不同的。