MD5加密(2)

   

1:MD5

以前在asp时代常用的MD5算法好象是从动网流出来的,后来大家都用它,基本上有两种,区别在md5.asp的结尾部分

MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))

MD5=LCase(WordToHex(b) & WordToHex(c))

分别对应32位和16位加密方式

C#中对应的实现为

///

/// 16MD5加密方法,以前的DVBBS所使用

///

/// 待加密字串

/// 加密后的字串

public string MD5Encrypt(string strSource)

{

return MD5Encrypt(strSource, 16);

}

///

/// MD5加密,和动网上的16/32MD5加密结果相同

///

/// 待加密字串

/// 1632值之一,其它则采用.net默认MD5加密算法

/// 加密后的字串

public string MD5Encrypt(string strSource, int length)

{

byte[] bytes = Encoding.ASCII.GetBytes(strSource);

byte[] hashValue = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes);

StringBuilder sb = new StringBuilder();

switch (length)

{

case 16:

for (int i = 4; i < 12; i++)

sb.Append(hashValue[i].ToString("x2"));

break;

case 32:

for (int i = 0; i < 16; i++)

{

sb.Append(hashValue[i].ToString("x2"));

}

break;

default:

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

{

sb.Append(hashValue[i].ToString("x2"));

}

break;

}

   

同样的其它语言都实现了DES加密与.netframeworkdes基础实现也不一样,比较郁闷的是我刚开始使用.net framework时还真的改写过perl版的des,后面才发现其实有更简单的办法,因为网上流传的perl/c/java版的des算法都是块加密的,设置CipherModeECB就好了,郁闷ing.

源代码如下

public static byte[] DESKey = new byte[] {0x82, 0xBC, 0xA1, 0x6A, 0xF5, 0x87, 0x3B, 0xE6, 0x59, 0x6A, 0x32, 0x64, 0x7F, 0x3A, 0x2A, 0xBB, 0x2B, 0x68, 0xE2, 0x5F, 0x06, 0xFB, 0xB8, 0x2D, 0x67, 0xB3, 0x55, 0x19, 0x4E, 0xB8, 0xBF, 0xDD };

///

/// DES加密

///

/// 待加密字串

/// 32Key

/// 加密后的字符串

public string DESEncrypt(string strSource) {

return DESEncrypt(strSource, DESKey);

}

public string DESEncrypt(string strSource,byte[] key)

{

SymmetricAlgorithm sa = Rijndael.Create();

sa.Key = key;

sa.Mode= CipherMode.ECB;

sa.Padding = PaddingMode.Zeros;

MemoryStream ms = new MemoryStream();

CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);

byte[] byt = Encoding.Unicode.GetBytes(strSource);

cs.Write(byt, 0, byt.Length);

cs.FlushFinalBlock();

cs.Close();

return Convert.ToBase64String(ms.ToArray());

}

///

/// DES解密

///

/// 待解密的字串

/// 32Key

/// 解密后的字符串

public string DESDecrypt(string strSource) {

return DESDecrypt(strSource, DESKey);

}

public string DESDecrypt(string strSource,byte[] key)

{

SymmetricAlgorithm sa = Rijndael.Create();

sa.Key = key;

sa.Mode = CipherMode.ECB;

sa.Padding = PaddingMode.Zeros;

ICryptoTransform ct = sa.CreateDecryptor();

byte[] byt = Convert.FromBase64String(strSource);

MemoryStream ms = new MemoryStream(byt);

CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);

StreamReader sr = new StreamReader(cs, Encoding.Unicode);

return sr.ReadToEnd();

}

   

   

   

   

   

世上MD5解密之最快方法整理

般来说,形如1e4dc79d489e86b2的16位或者32位密码就是经过MD5加密的,(当然也有特殊,比如DVBBS在登陆时候会先产生一个16位的随机密码,当然,这个密码还是和MD5密码的形式有点区别,相同的是都是16位的数字+字母组合 。);

这个一般来说可以用一个叫dv.exe的工具来破解。他可以破解加密前是10位以下的纯数字或者纯字母,破解纯数字的,速度超快,但是纯字母的,就慢了,当然他还有其他功能,但是其他功能没什么特别之处,所以不说。

   

破解纯数字时候:dv -p a.txt -b num

   

纯字母: dv -p a.txt -b char

   

[以上的两a.txt是保存要破解的密码存放的文件,存放格式是每行一组,例如:

   

1e4dc79d489e86b2 admin

   

1e4dc79d489e86b3 admin2

   

注意:在要破解的密码和后面的admin 用户名之间有一个空格。

   

当然还有很多字典破解 的工具,不建议使用。

   

还有就是有很多网站提供MD5密码查询,比如:

   

http://www.md5lookup.com/?category=01-3&searck=on

http://www.md5.org.cn

http://www.xmd5.org/

http://www.milw0rm.com/md5/info.php

http://www.neeao.com/md5/

http://md5.mmkey.com/

http://gdataonline.com/seekhash.php

http://www.plain-text.info/search.php

http://passcracking.com/Good_values_list.asp

http://www.hashchecker.com/index.php?_sls=search_hash

http://md5.rednoize.com/

http://us.md5.crysm.net/

http://uploadpage.net/ap/php/projects/rt/addhash.php

   

   

 

 

 

 

 

16MD5加密和32MD5加密到底有什么区别?

我发现16位加密和32位加密的密文中的一段一模一样!

   

"123456"  md516位和32位加密后

          49ba59abbe56e057

e10adc39 49ba59abbe56e057 f20f883e

   

看中间

   

"123456789" md516位和32位加密后

         323b453885f5181f

25f9e794 323b453885f5181f 1b624d0b

   

"abcdefg"  md516位和32位加密后

         148de9519b8bd264

7ac66c0f 148de9519b8bd264 312c4d64

-------------------------------------------------------------------------------------

那个所谓的16位加密,其实就是从32位里取出16位而已

   

首先按照补位再经过4轮对链接变量的循环操作算出32位(或更高位),然后按照"规定"从中间取出16

----------------------------------------------------------------------------------------------

如果真是MD5的话,那出来的结果就是128位(BIT),

   

转为16进制的话,,那么就是32""----这里的位就是你们的位

   

MD5没有你们说的什么16"",

除非是进行了进一步的处理,,但那样的话,也就不叫MD5了,那就是在MD5的基础上,它是进行了截取中间的16位,实际上,安全性降低了的,只是对于

网站那点少得可怜的资料,

是很难产生碰撞的,

并且用16位也便于存储,

比较吧,

我想这也是只用16位的最主要的原因

   

所以用16位肯定是降低了安全性,但不用怕。。。。。。。所以就用了

   

MD5如果要求不规范点的说法的话,可以是加密_____当然是不可逆的的变换

规范点的说法,应该叫散列才对,

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值