| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 13157 人关注过本帖, 3 人收藏
标题:[原创]MD5加密简介以及C#下的操作实现
只看楼主 加入收藏
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
结帖率:100%
收藏(3)
 问题点数:0 回复次数:47 
[原创]MD5加密简介以及C#下的操作实现

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 天使不哭 E-mail:boyliupan@163.com QQ:49849668
*/ 时间: 2007-7-29 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


一:关于MD5加密
(这段文字称不上是原创,从网上找的关于MD5加密的简介,精选了一下,找了一段比较容易理解的给大家看。)
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

有上面的简介大家应该对MD5有所了解,也应该可以看出MD5加密是无法进行解密的(当然这个也不是绝对的,当然这个我们这篇文章不研究),例如一个string,利用MD5算法进行加密以后你是无法将他还原为原来的string。看到这个的时候可能有些菜鸟会有疑问了,不能解密我又应该怎么样来利用他呢?实际上想明白了就很简单,在日常开发中,如果数据没有采用任何加密算法进行加密的话,数据在数据库的存储方式是以明文形式存放的,一旦数据库被破解,也就是意味着数据泄露,但是如果数据经过加密,就算数据库被破解,他们所看到的也只是一堆毫无排列顺序可言的数字或字符,当然我们自己看到的也是,呵呵,废话了啊。
但是MD5加密有一个特点,就是同一个string在同样的编码方式下加密的结果是一样的,看到这,我也大家也应该明白了点吧,我们所能做的就是通过对加密后的数据进行比较而达到我们的目的,好了,废话结束,下面开始C#下MD5加密的教程。不过如果是菜鸟的话我还是希望能看看上面的文字,希望通过这段文字可以让你对MD5有一定的了解。

二:C#下的MD5加密实现
怕有些菜鸟看不太懂,我没有使用ConsoleCode项目实现,而是利用一个简单的Winform程序表达我想表达的意思。
(1):窗体控件布局如图

图片附件: 游客没有浏览图片的权限,请 登录注册

(2):控件作用
textbox1:输入待加密的string
button1:输出加密结果到label1;
button2:输出加密结果到label2;(主要用两次加密结果的比较)
label1,label2:显示结果
(3):完整代码如下
(Form1.cs)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string MD5Create(string STR) //STR为待加密的string
{
string pwd = "";
//pwd为加密结果
MD5 md5 = MD5.Create();
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(STR));
//这里的UTF8是编码方式,你可以采用你喜欢的方式进行,比如UNcode等等
for (int i = 0; i < s.Length; i++)
{
pwd = pwd + s[i].ToString();
}
return pwd;
}

private void button1_Click(object sender, EventArgs e)
{
label1.Text = MD5Create(textBox1.Text.Trim());
}

private void button2_Click(object sender, EventArgs e)
{
label2.Text = MD5Create(textBox1.Text.Trim());
}
}
}
三:总结
实现代码并不多,比较容易理解,这里面我给大家介绍他的使用方法,有不明白的大家可以跟帖提问。
我语文不好,如果有哪点描述的不够清晰的话,还请见谅。

搜索更多相关主题的帖子: 天使 简介 中国 文字 
2007-07-29 13:53
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 

有人看没有人回帖,太伤心了.....


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-07-30 11:44
limeiping
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-31
收藏
得分:0 

我顶

2007-07-30 13:39
月夜枫华
Rank: 4
等 级:贵宾
威 望:12
帖 子:437
专家分:42
注 册:2006-1-2
收藏
得分:0 
MD5加密是一种使用普遍的加密方式,方便而且安全系数高.
但是MD5加密的方式不只一种,我见过的就有三中.楼主发表的是其中之一,加密以后是一个16字节的byte[]数组,一般来说无法转换为ASCII码.
还有两种就是加密为16字节和32字节的密文ASCII字符串.

2007-07-30 15:44
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 

我发的是32位的加密方法,适合新手用的。


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-07-30 16:18
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
收藏
得分:0 
请问MD5这个类还有其它加密的方法不?

不相信未作牺牲竟先可拥有,只相信靠双手找到我的欲求!!
我的博客:http://liao5930.blog.
2007-07-30 19:35
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 

还有16bit的等等,你可以到网上搜索下,这篇文章只是带你们入门。


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-07-30 20:46
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 

这个是16位的加密实例
using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;

namespace md5
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetMd5Str("8"));
}
public static string GetMd5Str(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
return t2;
}


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-07-30 20:57
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
收藏
得分:0 

大家可否说下怎样解密?谢谢


不相信未作牺牲竟先可拥有,只相信靠双手找到我的欲求!!
我的博客:http://liao5930.blog.
2007-08-01 13:47
天使不哭
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:677
专家分:22
注 册:2006-7-9
收藏
得分:0 
以下是引用guang在2007-8-1 13:47:41的发言:

大家可否说下怎样解密?谢谢

MD5是单项加密,是不能解密的,小兄弟还是自己看看1楼我写的文章,里面讲的很详细。


C#Winform技术群:25380362
博客:http:///boyliupan/
2007-08-01 14:28
快速回复:[原创]MD5加密简介以及C#下的操作实现
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024114 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved