C#常用散列算法与加解密算法使用参考模板范本.doc
- 【下载声明】
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
展开阅读全文