- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C#常用散列算法与加解密算法使用.doc
C# 常用散列算法与加解密算法使用
在应用系统开发中,安全涉及的机密性、完整性、身份认证都需要散列算法或加解密算法的参与,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 的地方。
FormsAuthentication.HashPasswordForStoringInConfigFile(明文, MD5);
FormsAuthentication.HashPasswordForStoringInConfigFile(明文, SHA1);
如上第二个参数指明了要使用哪种散列算法,不区分大小写
法二、使用 HashAlgorithm。
HashAlgorithm 类的命名空间是 System.Security.Cryptography。
using (HashAlgorithm hash = HashAlgorithm.Create(SHA1))
{
string plaintext = 明文;
byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext);
byte[] hashValueBytes = hash.ComputeHash(plaintextBytes);
string hashValue = BitConverter.ToString(hashValueBytes).Replace(-, );
Console.WriteLine(hashValue);
}
HashAlgorithm.Create 的参数指明了要使用哪种散列算法,不区分大小写。BitConverter 将二进制用十六进制字符串表示,删除掉横线间隔便于与其他散列算法的结果兼容。
上述两种方法,输出的散列值都是用大写的十六进制字符串表示的二进制,其他语言中有的是小写字符,所以在与其他语言进行交互时,要注意大小写。
加密算法
对称加密
对称加密只有一套密钥,加密和???密均使用该密钥,该密钥决定了密文的安全与否,所以一定要保存好该密钥。对称加密的特点是速度快,能对大容量数据进入加密解密。
本文介绍的 TripleDES 是对 DES 的加强,使用的类是TripleDESCryptoServiceProvider,其命名空间是 System.Security.Cryptography。
using (TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider())
{
using (ICryptoTransform transform = tripleDES.CreateEncryptor())
{
string plaintext = 明文;
byte[] plaintextBytes = Encoding.UTF8.GetBytes(plaintext);
byte[] ciphertextBytes = transform.TransformFinalBlock(plaintextBytes, 0, plaintextBytes.Length);
string ciphertext = Convert.ToBase64String(ciphertextBytes);
Console.WriteLine(ciphertext);
}
}
我们可以看到加密后的 byte 数组,和散列算法不同,这次是通过转换为 B
文档评论(0)