C#常用散列算法与加解密算法使用参考模板范本.doc

上传人(卖家):林田 文档编号:5568536 上传时间:2023-04-25 格式:DOC 页数:4 大小:32KB
下载 相关 举报
C#常用散列算法与加解密算法使用参考模板范本.doc_第1页
第1页 / 共4页
C#常用散列算法与加解密算法使用参考模板范本.doc_第2页
第2页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、C# 常用散列算法与加解密算法使用在应用系统开发中,安全涉及的机密性、完整性、身份认证都需要散列算法或加解密算法的参与,C# 提供了常用的散列算法和加解密算法类,利用这些类,我们可以方便地实现所需功能。散列算法散列算法是把任意长度的输入,变换成固定长度的输出,且不能由输出推算出输入,这里的输出,也就是我们常说的散列值。理论上来说,存在两个不同的输入,经过散列算法后获得相同的散列值,但是由于要找到这样的一组输入,几乎是不可能的任务,所以我们可以认为世界万事万物中不存在拥有相同散列值的事物(尽管实际是存在的),鉴于散列算法的这种特性,它常常被用于文件校验、密码存储、数字签名等场合。常用的散列算法是

2、 MD5、SHA-1(程序中受特殊字符限制,常常用 SHA1 表示),在 C# 中有多种方式可以创建 MD5、SHA1 的散列值。法一、使用 FormsAuthentication。FormsAuthentication 类的命名空间是 System.Web.Security,在 ASP.NET 环境中可以直接使用,但在 VC# 环境中,需要先在引用中添加程序集 System.Web,该程序集位于类似 C:WINDOWSMicrosoft.NETFrameworkv2.0.50727System.Web.dll 的地方。FormsAuthentication.HashPasswordForSt

3、oringInConfigFile(明文, MD5);FormsAuthentication.HashPasswordForStoringInConfigFile(明文, SHA1);如上第二个参数指明了要使用哪种散列算法,不区分大小写法二、使用 HashAlgorithm。HashAlgorithm 类的命名空间是 System.Security.Cryptography。using (HashAlgorithm hash = HashAlgorithm.Create(SHA1) string plaintext = 明文; byte plaintextBytes = Encoding.UT

4、F8.GetBytes(plaintext); byte hashValueBytes = hash.ComputeHash(plaintextBytes); string hashValue = BitConverter.ToString(hashValueBytes).Replace(-, ); Console.WriteLine(hashValue);HashAlgorithm.Create 的参数指明了要使用哪种散列算法,不区分大小写。BitConverter 将二进制用十六进制字符串表示,删除掉横线间隔便于与其他散列算法的结果兼容。上述两种方法,输出的散列值都是用大写的十六进制字符串

5、表示的二进制,其他语言中有的是小写字符,所以在与其他语言进行交互时,要注意大小写。加密算法对称加密对称加密只有一套密钥,加密和解密均使用该密钥,该密钥决定了密文的安全与否,所以一定要保存好该密钥。对称加密的特点是速度快,能对大容量数据进入加密解密。本文介绍的 TripleDES 是对 DES 的加强,使用的类是TripleDESCryptoServiceProvider,其命名空间是 System.Security.Cryptography。using (TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceP

6、rovider() 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(ciphert

7、extBytes); Console.WriteLine(ciphertext); 我们可以看到加密后的 byte 数组,和散列算法不同,这次是通过转换为 Base64 格式的字符串,主要是还有个解密的过程,用 Base64 的话,解密过程中可以更方便地转换回 byte 数组。另外,我们会发现,没有密钥!的确,这里是随机产生的。下面看看如何指定密钥进行加密、解密。using (TripleDESCryptoServiceProvider tripleDES = new TripleDESCryptoServiceProvider() tripleDES.Key = Convert.FromBa

8、se64String(9dSHSqYA6TMURxnutEcuVcJtG1X/3bFG); tripleDES.IV = Convert.FromBase64String(Yj3QlMD0idk=); using (ICryptoTransform transform = tripleDES.CreateEncryptor(tripleDES.Key, tripleDES.IV) string plaintext = 明文; byte plaintextBytes = Encoding.UTF8.GetBytes(plaintext); byte ciphertextBytes = trans

9、form.TransformFinalBlock(plaintextBytes, 0, plaintextBytes.Length); string ciphertext = Convert.ToBase64String(ciphertextBytes); Console.WriteLine(ciphertext); Console.WriteLine(Convert.ToBase64String(tripleDES.Key); Console.WriteLine(Convert.ToBase64String(tripleDES.IV); using (ICryptoTransform tra

10、nsform = tripleDES.CreateDecryptor(tripleDES.Key, tripleDES.IV) string ciphertext = bsuyQ2xESws=; byte ciphertextBytes = Convert.FromBase64String(ciphertext); byte plaintextBytes = transform.TransformFinalBlock(ciphertextBytes, 0, ciphertextBytes.Length); string plaintext = Encoding.UTF8.GetString(p

11、laintextBytes); Console.WriteLine(plaintext); Console.WriteLine(Convert.ToBase64String(tripleDES.Key); Console.WriteLine(Convert.ToBase64String(tripleDES.IV); 指定密钥是在 tripleDES.CreateEncryptor 和 tripleDES. CreateDecryptor中指定的,而解密的代码是加密的一个反向的过程。要注意:明文与 byte 数组之间的转换用的是 Encoding.UTF8.GetBytes、Encoding.U

12、TF8.GetString(也可以是其他编码);密文与 byte 数组之间的转换用的是 Convert.ToBase64String、Convert.FromBase64String;密钥用 Base64 存储。不对称加密不对称加密有两套密钥,一套为公钥可以公开,一套为私钥需要保密。不对称加密速度慢,且无法对大容量的数据进入加密解密,但它可以对外公开公钥,保存一个别人不知道的私钥。常用的不对称加密算法是 RSA。可使用 RSACryptoServiceProvider 进行 RSA 加密、解密,该类的命名空间是 System.Security.Cryptography。using (RSACr

13、yptoServiceProvider rsa = new RSACryptoServiceProvider() string plaintext = 明文; byte plaintextBytes = Encoding.UTF8.GetBytes(plaintext); byte ciphertextBytes = rsa.Encrypt(plaintextBytes, false); string ciphertext = Convert.ToBase64String(ciphertextBytes); Console.WriteLine(ciphertext);不对称加密的密钥并不是随便

14、输一串字符就可以当作密钥的,它是经过严格的算法产生的,如上没有指定,那么就使用自动产生的密钥。如果要获取这个密钥,怎么办呢?使用 rsa.ToXmlString(false),参数 false 表示不要把私钥输出来。下面用实例演示一下使用特定的密钥进行加密、解密。rsa.FromXmlString(l5oO4OxuolbjFt7RNRh0q7K7UU2IsbdogvFjpOm9JKAUxgAMd9RlO2mL4GQkJLUNXY4xflIxoPYnRRAgK/Y4mskT5Zj3vFORStf4BvbHtSLoh/vi5kokgpu5f7NOV9cchfdRvYXLVcTmZXJynEfYqn

15、IfdsdCPCCY6212ubKyMc=AQAB1Ho+cnTvHyiJ4d9+08mLQTOIbJ7Bp3IKzn/hEaDZODciCGrvbBw9CLRUPzVq3TkQlEp8Vone83xWensaAYKcYQ=tqenJ9f+1PLqunKVU/58C40zH6ljadxn+aDa5JA7mdJNu8ONdzC2XhQIt2IZPwr+NoW55skZVQLPWNnBS7i2Jw=BccFJ6uSTPCXPzMKicuzI6S5EusGLP1m2dKUVhxfi63EGSJ/PBtQdYohuE5Fh5pjnwSfeOLq0wgQeega/uuEQQ=FatYIlr2qY7UGC

16、CF5LwZPUmYGhZ/a8yxLSVPMrSFzZ7sh+0QOGa4C/s2eYMS2a7VL+S3hFCxR6uYq8LRsskMGw=F+LZVyPfJnyukJKIC75QtWMMXQp9hcmsUPVeJ0M0ih/sjeH8urmjmWQIH4TfF2GQ/EzBGJcm5I6yg9q5reXjQw=Wb0+FXKfQsWAA2e+G1nwpjpUm5nz0o8o9GoDe/lIl0eTRGl+9+foTLT7scZVhs0NrlWfgpERA6DyOfWDtcfrD6JKi4ZH5jtbOw2TMym1q3Yca0T4EL9WJK7RKhySoShu/K+ghcl9n7JY

17、NvhdgDh25DzWZz5GAHoUASclx+eUfoE=);byte bytes = rsa.Encrypt(Encoding.UTF8.GetBytes(明文), false);string cryptograph = Convert.ToBase64String(bytes);Console.WriteLine(cryptograph);byte bytes2= rsa.Decrypt(Convert.FromBase64String(cryptograph), false);string plaintext = Encoding.UTF8.GetString(bytes2);Co

18、nsole.WriteLine(plaintext);上述密钥是含有私钥的,实际应用中,如果我们希望公众发来的数据是加密的,那么我们公开公钥,公众只需要用公钥进行加密,然后接收方再用私钥进行解密。不对称加密常常和对称加密组合使用:对称加密对大内容进行加密,不对称加密再把对称加密的密钥进行加密,这样组合起来就达到了安全传输大内容的效果。Managed 与 Provider 区别在其他一些文章中,我们会发现,还有以 Managed 结尾的类,比如:l System.Security.Cryptography.SHA1 l System.Security.Cryptography.SHA1Manag

19、ed l System.Security.Cryptography.SHA1CryptoServiceProvider这三个类有什么关系呢?SHA1 是抽象类,SHA1Managed 和 SHA1CryptoServiceProvider 继承于 SHA1。SHA1Managed 和 SHA1CryptoServiceProvider 有什么区别呢?二者功能都一样。SHA1Managed 被写入了托管 .NET 语言(比如:C#、VB.NET);而 SHA1CryptoServiceProvider 是基于 Windows Crypto API 的,也就是说它是依赖于 Windows 中某个 DLL 的。后者性能要高些。其他以 Managed 和 Provider 结尾的类也是上述道理。日期:2012年6月姓名:喻林职称:数据库系统工程师QQ:3410655网址:4 / 4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 常用办公文档
版权提示 | 免责声明

1,本文(C#常用散列算法与加解密算法使用参考模板范本.doc)为本站会员(林田)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|