浅述.Net中的Hash算法(顺带对称、非对称算法)

【写在前面】

对称加密算法(只有一个私钥,比如DES【不推荐】、AES);

非对称加密算法(公钥与私钥,比如RSA);

Hash算法也称为散列函数算法,任意长度的数据都转换为固定长度的字符串(称为"哈希值"或简称"哈希")(没有密钥,但可以通过"加盐"增加彩虹表攻击的难度以提高哈希值安全性, 比如MD5、SHA-1【不推荐】、SHA-256、SHA-384、SHA-512),有别于前面两种加密算法,哈希算法具有不可逆性,虽然相同的输入一定得到相同的输出,不同的输入大概率得到不同的输出,但不是绝对,不同的输入也有可能碰撞出相同的哈希值输出(因此哈希算法通常应用于只加密不解密的场景:可用于验证原始数据是否被篡改、存储加密后的密码等)。

在Hash算法的基础上,在来说下HMAC(Hash-based Message Authentication Code,哈希运算消息认证码) :​HMAC是密钥相关的哈希运算消息认证码​,HMAC运算利用哈希算法,以一个密钥(好比Hash加盐处理,但相对加盐有不同的内部处理机制,详可参见 HMAC算法详解HMAC与HS256算法)和一个消息为输入,生成一个消息摘要作为输出,其核心和基础还是Hash算法。

FormsAuthentication.HashPasswordForStoringInConfigFile 实现Hash加密(已弃用)

好,以上是相关背景知识。

今天在一个旧系统中看到这样的密码验证方法,也就是说后台密码存储是以将"用户名+密码"以Hash加密存放的,这里想说的是.Net 4.5中提供的Hash加密方法 FormsAuthentication.HashPasswordForStoringInConfigFile, 通过说明可知该方法已被官方弃用,不再推荐使用,可以在VS2022中反编译进入内部了解其实现细节

以下FormsAuthentication.HashPasswordForStoringInConfigFile的内部实现,从实现的调用中可以看到System.Web.Security.Cryptography.CryptoAlgorithms内部静态类中不仅有创建SHA512方法,还有相应创建HMACSHA512的方法,可做下了解:

替代方案:XxxCryptoServiceProvider类实现加密算法

既然FormsAuthentication.HashPasswordForStoringInConfigFile已经过时弃用,官方有可用的替代方法吗?当然有,同样在System.Security.Cryptography 命名空间,可以找到SHA1CryptoServiceProvider、MD5CryptoServiceProvider、SHA256CryptoServiceProvider、SHA384CryptoServiceProvider、SHA512CryptoServiceProvider类, (同时也提供了对称算法的DESCryptoServiceProviderAesCryptoServiceProvider 及 非对称算法的RSACryptoServiceProvider

以下以MD5为例,实现如下:

cs 复制代码
/// <summary>
/// 32位MD5加密
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
private static string Md5Hash(string input)
{
	MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
	byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
	StringBuilder sBuilder = new StringBuilder();
	for (int i = 0; i < data.Length; i++)
	{
	    sBuilder.Append(data[i].ToString("x2"));
	}
	return sBuilder.ToString();
}

(附)包括过时及不过时的加解密方法,可以参考:C#实现加密与解密详解_C#教程_脚本之家

相关推荐
Full Stack Developme7 天前
哈希是什么
算法·哈希算法
Frostnova丶7 天前
(1)LeetCode 1. 两数之和
leetcode·哈希算法
秦jh_7 天前
【C++】哈希扩展
开发语言·c++·哈希算法
黄金龙PLUS8 天前
数据加密标准算法DES
网络安全·密码学·哈希算法·同态加密
羑悻的小杀马特8 天前
LFU缓存算法全解:从双哈希+双向链表到O(1)艺术,解锁长期热点守护神
算法·缓存·哈希算法·lfu·双链表
Darkwanderor8 天前
离散化思维的应用
数据结构·c++·算法·哈希算法
左手厨刀右手茼蒿9 天前
Flutter for OpenHarmony: Flutter 三方库 hashlib 为鸿蒙应用提供军用级加密哈希算法支持(安全数据完整性卫士)
安全·flutter·华为·c#·哈希算法·linq·harmonyos
Frostnova丶9 天前
LeetCode 1461. 检查一个字符串是否包含所有长度为 K 的二进制子串
算法·leetcode·哈希算法
美好的事情能不能发生在我身上10 天前
Leetcode热题100中的:哈希专题
算法·leetcode·哈希算法
不染尘.10 天前
字符串哈希
开发语言·数据结构·c++·算法·哈希算法