1、MD5算法

MD5是一种安全哈希算法,输入两个不同的明文不会得到相同的输出值,根据输出值,无法得到原始明文,即过程不可逆; 所以没有现成的MD5解密算法,只能采用Exhaustive的方法,将可能的明文用MD5算法进行哈希处理后,将得到的哈希值与原始数据形成一对一的映射表,将哈希值进行比较MD5算法破解表中密码的值,通过匹配从映射表中找出解密密码对应的原始明文。

对于信息系统或网站系统,MD5算法主要用于对用户注册密码进行加密。 对于普通强度的密码加密,可以通过以下三种方式破解:

(1)在线查询密码。 一些在线MD5值查询网站提供MD5密码值查询。 输入MD5密码值后,如果数据库中存在,可以快速获取其密码值。

(2)使用MD5破解工具。 网上有很多MD5破解的专用软件,设置字典即可破解。

(3) 通过社会工程学获取或重置用户密码。

所以单纯的MD5加密是没有办法做到绝对安全的,因为普通的MD5加密有多种暴力破解的方法,所以如果要保证信息系统或网站的安全,就需要修改MD5来增强其安全。 本文是在MD5加密算法的基础上改进的!

2、md5算法应用

一个简单的例子:字符串加密和文件加密

方法一:

公共字符串 GetMD5String(字符串密码)

{

MD5CryptoServiceProvider md5=new MD5CryptoServiceProvide();

byte[] data=System.Text.Encoding.ASCII.GetBytes(pwd);

byte[] md5data = md5.ComputeHash(数据);

StringBuilder builder=new StringBUilder();

对于(int i=0;i{

builder.Append(md5data[i].ToString("X2"));

}

返回生成器;

}

方法二:

公共字符串 GetMd5(字符串消息)

{

字符串 cryptStr = "";

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bytes = Encoding.UTF8.GetBytes(msg);

字节[] cryptBytes = md5。 ComputeHash(字节);

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

{

cryptStr += cryptBytes[i].ToString("X2");

}

返回密码;

}

加密文档

MD5加密文件

string GetFileMd5(字符串路径)

{

字符串 ctyptStr = "";

字节[] cryptBytes;

使用 (FileStream fs = new FileStream(path,FileMode.Open))

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

加密字节 = md5。 ComputeHash(fs);

}

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

{

ctyptStr += cryptBytes[i].ToString("X2");

}

返回 ctyptStr;

}

2.1 md5加密原理

MD5使用512位的数据包来处理输入信息,每个数据包被分成16个32位的子数据包。 经过一系列的处理,算法的输出由四个32位的数据包组成。 分组拼接后,将生成一个 128 位的哈希值。

在MD5算法中,需要先对信息进行填充,使得字节长度与512的余数计算结果等于448。因此,信息的字节长度(Bits Length)会扩展为N* 512+448,即N*64+56字节(Bytes),N为正整数。 填充方法如下,在信息后面填充一个1和无数个0,直到满足上述条件后,才停止用0填充信息。

然后将填充前信息长度的 64 位二进制表示添加到结果中。 经过这两步处理后,当前信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍,这样做的原因是为了满足后续处理中对信息长度的要求。

MD5中有四个称为ChainingVariable的32位整数参数,它们是:A=0x01234567,B=0x89abcdefmd5加密多少位,C=0xfedcba98,D=0x76543210。 设置完这四个链接变量后,算法开始四轮循环运行,循环次数为信息中512位信息组的个数。

将以上四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。 主循环有四轮(MD4只有三轮),每一轮的循环都非常相似。 第一轮进行了 16 次操作。 每次运算对a、b、c、d中的三个进行非线性函数运算,然后将结果加到第四个变量(文中的一个子群和一个常数)上。

然后将结果向右循环不定数,加上a、b、c或d之一。 最后用结果替换 a、b、c 或 d 之一。 这是每个操作中使用的四个非线性函数(每轮一个)。

js md5 16位加密_md5加密16位和32位_md5加密多少位

他们之中, ? 是异或,∧是与,∨是或,是相反的符号。

如果X、Y、Z对应的位是独立一致的,那么结果的每一位也应该是独立一致的。 F 是按位运算的函数。 也就是说,如果 X,则 Y,否则 Z。函数 H 是按位奇偶校验运算符。 这一切都完成后,将a、b、c、d分别添加到A、B、C、D中。 然后算法继续运行下一包数据,最后的输出就是A、B、C、D的拼接。最后得到的A、B、C、D就是输出结果,A为低位,D为高位,DCBA组成128位输出结果。

2.2 MD5 的安全性

从安全的角度来看,MD5 的输出是 128 位。 如果使用纯暴力破解的方式来查找一条给定Hash值的消息,计算难度为2128。用一台每秒可以测试10亿条消息的计算机需要1.07×1022年。 如果使用生日攻击方式,需要测试264条消息才能找到两条Hash值相同的消息,而使用每秒可以测试10亿条消息的计算机需要585年。

2.3 Md5加密算法的应用

MD5加密算法因其良好的安全性以及该算法的商业免费使用而被广泛使用。 md5算法主要用于数字签名、文件完整性验证、密码加密等方面。

3.改进的加密方式

3.1 目前md5加密方式的缺陷

在目前的信息系统中,主要使用md5加密方式,在脚本页面中引用包含md5加密函数代码的文件,以asp脚本为例,在需要调用的页面中输入,md5.asp就是md5加密函数代码文件,然后直接调用函数MD5(sMessage)。 md5加密后的值有16位和32位。 如果MD5=LCase(WordToHex(a) & WordToHex(b) & WordToHex)用于md5加密函数(c) & WordToHex(d)),则表示32位,如果MD5=LCase(WordToHex(b) & WordToHex (c))用的,表示16位。 例如,要加密明文为“123456”的值,有两个md5值,

如下:

A=123456 密码=md5(A)= 49ba59abbe56e057 密码=md5(A)= e10adc3949ba59abbe56e057f20f883e

如果将加密后的md5值直接存入数据库,当网站存在注入或其他漏洞时,入侵者极有可能获取到用户的密码值,将md5值存入数据库。

md5加密16位和32位_js md5 16位加密_md5加密多少位

如果将加密后的md5值直接保存在数据库中,当网站存在注入或其他漏洞时,入侵者极有可能获取用户的密码值,通过md5在线查询或暴力破解等方式获取密码。

3.2 基于md5算法的改进加密方式

本文提到的方法是使用md5加密算法对明文(密码)进行加密,更改密文,截取密文中的一段数据并丢弃md5加密多少位,然后使用随机函数填充丢弃的数据,以及整个过程md5加密后的位数没有变化。 加密过程用算法描述如下:

(1)对明文密码进行md5加密,得到密文md5(密码)。

(2)使用截取函数截取加密后的密文,截取从beginningnumber位置开始的数字值得到密码A,其中A=left(md5(password),beginnumber-1)。

(3)使用截取函数截取加密后明文数字位数后的值B,其中B=right(md5(password), md5-digit -(beginnumber+number-1))。

(4)使用随机函数gen_key(number)填入截取数的值。

(5) 转换后的密码值为encrypt_password =A&get_key(number)&B

变量说明:

md5加密多少位_js md5 16位加密_md5加密16位和32位

解密过程有点类似于加密过程,先对输入的明文进行加密,然后从beginnumber截取前半部分得到A',后半部分得到B',

然后从数据库中读出密码的A、B部分,最后如果A=A',B=B',则认为用户输入的密码与数据库中的密码相匹配。

3.3 关键代码及实现

本文提到的改进方法的关键实现代码如下:

md5加密多少位_js md5 16位加密_md5加密16位和32位

四、讨论与结论

也有人提出修改md5加密算法中的函数或变量,以增强原有md5算法的安全性。 但是这种方法修改了原md5函数或变量后,无法验证修改后的md5算法是否和原md5算法一样强。 原来的算法是一样的。

本文提出的方法是在原有md5加密的基础上,从密文中截取一定位数的字符串,并用随机数填充。 最终的密文虽然经过md5加密,但其数值相差较大,所以常规的md5破解方法永远无法破解其原始密码值,

从而保证数据安全。 虽然目前攻击方式很多,比如SQL注入、跨站攻击等,但是通过这种方式获取数据库中的值并进行加密更加容易。 在网站或系统代码泄露之前,数据相对安全,具有一定的优势。 参考奖金。