C# 常用散列算法与加解密算法使用-散列算法

作者:vkvi 来源:ITPOW(原创) 日期:2012-6-29

在应用系统开发中,安全涉及的机密性、完整性、身份认证都需要散列算法或加解密算法的参与,C# 提供了常用的散列算法和加解密算法类,利用这些类,我们可以方便地实现所需功能。

散列算法

散列算法是把任意长度的输入,变换成固定长度的输出,且不能由输出推算出输入,这里的输出,也就是我们常说的散列值。理论上来说,存在两个不同的输入,经过散列算法后获得相同的散列值,但是由于要找到这样的一组输入,几乎是不可能的任务,所以我们可以认为世界万事万物中不存在拥有相同散列值的事物(尽管实际是存在的),鉴于散列算法的这种特性,它常常被用于文件校验、密码存储、数字签名等场合。

常用的散列算法是 MD5、SHA-1(程序中受特殊字符限制,常常用 SHA1 表示),在 C# 中有多种方式可以创建 MD5、SHA1 的散列值。

法一、使用 FormsAuthentication。

FormsAuthentication 类的命名空间是 System.Web.Security,在 ASP.NET 环境中可以直接使用,但在 VC# 环境中,需要先在引用中添加程序集 System.Web,该程序集位于类似 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll 的地方。

如上第二个参数指明了要使用哪种散列算法,不区分大小写

法二、使用 HashAlgorithm。

HashAlgorithm 类的命名空间是 System.Security.Cryptography。

HashAlgorithm.Create 的参数指明了要使用哪种散列算法,不区分大小写。BitConverter 将二进制用十六进制字符串表示,删除掉横线间隔便于与其他散列算法的结果兼容。

上述两种方法,输出的散列值都是用大写的十六进制字符串表示的二进制,其他语言中有的是小写字符,所以在与其他语言进行交互时,要注意大小写。

相关阅读

相关文章