书签 分享 收藏 举报 版权申诉 / 4
上传文档赚钱

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

  • 上传人(卖家):林田
  • 文档编号:5568536
  • 上传时间:2023-04-25
  • 格式:DOC
  • 页数:4
  • 大小:32KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C#常用散列算法与加解密算法使用参考模板范本.doc》由用户(林田)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C# 常用 算法 解密 使用 参考 模板 范本
    资源描述:

    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

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C#常用散列算法与加解密算法使用参考模板范本.doc
    链接地址:https://www.163wenku.com/p-5568536.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


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

    163文库