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

本文分析了FormsAuthentication.HashPasswordForStoringInConfigFile的历史和过时性,介绍了Hash算法(如MD5和SHA-256)、HMAC以及.NETFramework中可用的加密服务提供程序(如SHA1CryptoServiceProvider和MD5CryptoServiceProvider),讨论了如何用更现代的方法替换过时的密码验证技术。
摘要由CSDN通过智能技术生成

【写在前面】

对称加密算法(只有一个私钥,比如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类, (同时也提供了对称算法的DESCryptoServiceProvider 、 AesCryptoServiceProvider 及 非对称算法的RSACryptoServiceProvider

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

/// <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#教程_脚本之家

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电力系统PQ分解潮流算法和牛顿拉夫逊潮流算法都是求解电力系统潮流分布的常用方法,但它们的求解思路和算法步骤有所不同。 PQ分解潮流算法是将节点功率方程分解为节点电压幅值和相位两个方程组,其节点电压相位方程组为非线性方程组,可以使用迭代算法求解;节点电压幅值方程组为线性方程组,可以使用高斯消元法求解。而牛顿拉夫逊潮流算法则是直接迭代求解非线性节点功率方程组,每次迭代求解一个线性化的方程组,直到满足收敛条件。 PQ分解潮流算法的矩阵表达式为: $$\left[\begin{matrix} I & G \\ B & J \end{matrix}\right] \left[\begin{matrix} V \\ \theta \end{matrix}\right] = \left[\begin{matrix} P \\ Q \end{matrix}\right]$$ 其,$I$为单位矩阵,$G$为导纳矩阵的实部,$B$为导纳矩阵的虚部,$J$为节点导纳矩阵的虚部,$V$为节点电压幅值,$\theta$为节点电压相角,$P$为节点有功功率注入值,$Q$为节点无功功率注入值。 PQ分解潮流算法的步骤如下: 1. 根据电力系统的拓扑结构,构建导纳矩阵$Y$和节点注入功率向量$S$。 2. 将导纳矩阵$Y$分解为实部$G$和虚部$B$。 3. 初始化节点电压幅值$V$和相角$\theta$。 4. 根据节点电压幅值$V$和相角$\theta$,计算节点注入功率向量$S$。 5. 将节点注入功率向量$S$分解为有功功率向量$P$和无功功率向量$Q$。 6. 解节点电压相位方程组得到相角$\theta$。 7. 解节点电压幅值方程组得到电压幅值$V$。 8. 如果电压幅值$V$和相角$\theta$的变化量小于设定的收敛阈值,则停止迭代,输出结果;否则,返回步骤4,继续迭代。 总体而言,PQ分解潮流算法适用于系统存在大量无功负载的情况,收敛速度相对较快;而牛顿拉夫逊潮流算法适用于系统存在大量有功负载的情况,可以保证全局收敛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值