MD5 算法简介  

  MD5算法,即“Message-Digest Algorithm 5(信息-摘要算法)”,它是由MD2、MD3、 MD4 发展而来的一种单向加密算法,也就是哈希(HASH)算法,是由国际著名的公钥加 密算法标准RSA的第一设计者R.Rivest于上个世纪90 年代初开发出来的。现在,MD5已 经被广泛的应用到项目实践中。

  加密算法一般有两种,即单向加密算法和双向加密算法。双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,在需要的时候,又可以使用一定的算法将这些加密以后的密文数据解密为原来的明文数据。双向加密适合于隐秘通讯,比如,比如在网络上注册用户或者购买商品时,提交的真实姓名、身份证号码、 银行账号等信息,应当通过双向加密算法加密以后,再在网络上传输,这样,可以有效的 防止黑客的“偷听”,保证数据的安全,同时,网站接收到数据以后,可以通过解密算法来 获得准确的信息。

  双向加密既可以加密,又可以解密。而单向加密则刚好相反,它只能对明文数据进行 加密,而不能对加密了的密文数据再解密成原来的明文数据。可能读者会认为,不能解密 的加密算法有什么作用呢?在实际应用中,对软件系统数据库中的系统用户信息(如用户 密码)加密以及银行账号信息(如银行账号密码),就是一些典型的例子。当用户注册一个 新的账号或者使用银行账号时,这些绝密信息不是直接保存到数据库,而是经过单向加密后再保存,这样,即使这些绝密信息被泄露,别人也不能得到相应的明文数据,当然也就 达不到盗窃账号的目的。

  MD5算法就是单向加密的加密算法。它有两个很重要的特性,第一是任意两段明文数据,加密以后的密文数据一定是不相同的;第二是任意一段明文数据,经过加密以后,其密文数据永远是相同的。

  编写加密数据的方法

  微软在.NET架构中,引入了MD5算法,在使用Visual Studio 2008编程时,可以直接使用.NET 架构中提供的相关类来实现MD5 加密,这些类位于命名空间“System.Security.Cryptography”中。

  在本系统中,将使用MD5 加密用户密码的方法写在公共类“CPublic”中,因此首先 需要给“CPublic”类引入以下命名空间:

  //*************************************************************************************

  using System.Security.Cryptography;

  //*************************************************************************************

  然后在“CPublic”类中添加一个名为GetMd5Str()的静态方法,该静态方法用于将明文 字符串转换成密文的字符串。 定义好GetMd5Str()静态方法后,加上前面定义的公共数组userInfo,这时的“CPublic” 类代码如下:

  //*************************************************************************************

  using System;

  using System.Collections.Generic;

  using System.Linq; using System.Text;

  using System.Security.Cryptography;

  namespace SelectCourse

    {

      class CPublic

        {

          // 用于记录登录用户信息的字符串数组

          public static string[] userInfo = new string[4];

          // 使用MD5加密字符串的方法

          public static string GetMd5Str(string myString)

            {

              MD5 md5 = new MD5CryptoServiceProvider();

              // 获取字符串对应的字符数组

              byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);

              // 获取哈希字符串数组

              byte[] toData = md5.ComputeHash(fromData);

              string byteStr = null;

              for (int i = 0; i < toData.Length; i++)

                {

                  // 将字符数组连接还原成字符串,以十六进制的方式表示,不带前导"0x"

                  byteStr += toData[i].ToString("x");

                } return byteStr;

           }

        }

    } //*************************************************************************************

  说明:该代码即为本系统中“CPublic”类的最终代码。

  在 GetMd5Str()静态方法中,包含一个字符串类型的形式参数“myString”,该静态方法可以将指定的字符串“myString”使用MD5算法进行加密,然后返回加密后的密文数据字 符串“byteStr”。

  代码中“MD5CyptoServiceProvider”类是.NET 中“System.Security.Cryptography”命 名空间的一个类,提供专门用于MD5 单向数据加密的解决方法,也是本文中用来加密数据 库中用户密码的类。

  在使用上面编写“GetMd5Str()”方法加密系统用户密码之前,首先需要了解 “MD5CyptoServiceProvider”类中的一个重要的方法:ComputeHash()方法。ComputeHash() 方法用来将输入的明文数据(字符数组形式)使用MD5进行加密,然后输出加密后的密文 数据。在“GetMd5Str()”方法中:要加密的明文字符串为“myString”;用于存放明文字符 串的字符数组为“fromData”;用于接收密文数据的字符数组为“toData”;方法的返回值为 密文字符串“byteStr”。

  从代码中可以看出,“ComputeHash()”方法只能接受字符数组作为加密对象,输出的 密文也是字符数组。因此,在对明文字符串加密之前,必须首先将字符串转化为字符数组, 这就要用到“Encoding”类的GetBytes()方法,将字符串转化为字符数组,而加密以后的结 果也是使用字符数组输出。同样,在返回方法的返回值之前,也需要将密文字符数组转换 成密文字符串。

转载于:https://www.cnblogs.com/ryuu/archive/2012/03/17/2403948.html

C# MD5 加密算法相关推荐

  1. md5加密算法原理及其GO语言实现

    md5加密算法原理及其GO语言实现 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值 ...

  2. c++Builder XE6 MD5 加密算法 BASE64 URL 编码

    xe6,xe7 BASE64XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; varidmd5: TIdHashMessageD ...

  3. 一种增强的md5加密算法

    一种增强的md5加密算法 2008-06-04 16:26:48 标签:加密算法 md5 一种 增强的 [推送到技术圈] 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一种增强的md5加密算法 ...

  4. python md5加密解密_Python使用MD5加密算法对字符串进行加密操作示例

    本文实例讲述了Python使用MD5加密算法对字符串进行加密操作.分享给大家供大家参考,具体如下: # encoding: utf-8 from __future__ import division ...

  5. Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  6. MD5加密算法与SHA加密算法

    2.MD5加密 2.1 概述 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为R ...

  7. kso经验记录 --- c# 之MD5加密算法

    MD5加密算法,是比较常用的,也是比较好用的,不论进行小项目还是大项目都要进行MD5加密,因为这是不可逆的. 下面来记录一下: 直接上算法 using System; using System.Sec ...

  8. MD5加密算法(转)

    一起谈谈MD5加密算法 MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明 ...

  9. 关于Md5加密算法的原理及应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

  10. MD5加密算法的原理和应用

    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后 ...

最新文章

  1. PAT甲级1123 Is It a Complete AVL Tree (30分):[C++题解]建立平衡树、bfs,判完全二叉树
  2. php 科研,科研之路2
  3. 语义分割和实例分割_语义分割入门的一点总结
  4. 移动流媒体业务的技术与标准
  5. Alios Things的Flash划分规则
  6. [Web]Restful风格的适用场景
  7. HTML+CSS制作七夕跳动的红心动画效果
  8. C++基础——bitset与string的相互转化
  9. 简明python教程-Python简明入门教程
  10. 高效集成连接管理与平台运营 中琛物联赋能智慧城市建设
  11. [LeetCode][easy]Rank Transform of an Array
  12. MATLAB 字符串与矩阵的学习
  13. Redis秒杀实战:微信抢红包(附源码)
  14. originpro 2021 附安装教程
  15. Samba服务------SMB协议
  16. 红米note5解锁教程_红米NOTE5解锁包
  17. uniapp——如何在项目中使用阿里字体图标
  18. vue字符串生成二维码的相关组件
  19. 联想计算机设置恢复出厂,联想电脑恢复出厂设置还原系统攻略
  20. 企业邮箱帐号无法发信

热门文章

  1. java 静态方法 变量_Java变量的初始化及静态方法的实现
  2. OpenCV-Python实战(番外篇)——OpenCV、NumPy和Matplotlib直方图比较
  3. MongoDB独特查询
  4. bool型数组python_Python bool()
  5. jsp servlet示例_Java Servlet Cookies示例
  6. jsf tree组件_JSF UI组件标签属性示例教程
  7. Java Thread等待,通知和notifyAll示例
  8. Linux平台代码覆盖率测试工具GCOV简介
  9. C++基础教程之函数重载,什么是C++函数重载?
  10. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family