一个简单的加密算法(算法本身当然是前辈们发明的),适用范围不大,附哈希加密用法

//简单加密,所有字符对应唯一加密字符,在穷举法面前不堪一击。使用随机且足够长的秘钥能提高安全系数
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;
}

当然了,这里的哈希是没有加盐的
若要加盐,要么对每个用户随机生成盐值,就是一段字符串。并且要明文保存起来,在验证的时候拿来用;要么选择现有的(数据库中某地方已经保存的)字符串(条件:不会被修改,较长(这个可以处理))作为盐值,拼到密码里面再加密。这样的好处是就算有部分人密码一样(对付那些懒得改初始密码或喜欢用简单密码的人),他们的密码在哈希后也是不同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值