MD5加密是WEB开发中常用的功能,一般web中常用的包括两种方式:

1. 16位MD5值的产生

从实际上来说,这个MD5值其实还是32位的MD5值,因为MD5是32位的hash值,只是取了其中的9-25位的字符串。但是在php和早期的asp程序中使用比较广泛。

2. 32位MD5值的产生

这个是最原始的MD5值,就是32位的。

3. 不定位数的MD5值的产生,可以根据自己的实际来自定义,预防别人暴力拆解

可以根据自己的需要来截取,例如取前8位或者前9位作为密码,这样子就算别人攻破了数据库也无法进行暴力破解,因为一般的MD5在线查询加解密的地方,都是按照16位和32位来做的。这样子更安全一些。

4. 更安全的实现方法

这个可以改根据自己需要来进行,例如先产生一个16位的MD5的值,然后根据这个16位MD5的值再产生一个32位的MD5的值,这样子,就很容易获得更高的强度,让一切在线查询加解密的网站都失效。

附:代码实现

private string GetMD5FromString(string srcStr, int length)
{
    byte[] srcByte = Encoding.ASCII.GetBytes(srcStr);
    byte[] md5Byte = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(srcByte);
    StringBuilder sb = new StringBuilder();
    if (length == 16)
    {
        //如果是16位则取中间取32位加密的9-25字符
        for (int i = 4; i < 12; i++)
        {
            sb.Append(md5Byte[i].ToString("x2"));
        }
    }else if (length==32){
        //如果是其他,也就是32位
        for(int i=0; i<16; i++){
            sb.Append(md5Byte[i].ToString("x2"));
        }
    }else{
        //其它情况,根据参数输出
        for(int i=0; i<length; i++){
            sb.Append(md5Byte[i].ToString("x2"));
        }
    }
    return sb.ToString();
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注