`
勤业思行
  • 浏览: 83794 次
  • 性别: Icon_minigender_1
  • 来自: 贵阳
社区版块
存档分类
最新评论

密码字段的安全性研究和MD5算法

阅读更多

一、密码存储数据库的安全问题

     在实际应用中,一般不会直接在数据库中以明文的方式来保存用户的密码,因为这样很容易造成密码的泄露。所以需要将密码进行加密后以密文的方式进行保存,另外一种更有效的办法是只保存密码的MD5摘要,因为相同的两个字符串MD5值也相同,在登录时就可以根据密码的MD5摘要和数据库中存放的MD5值摘要进行比较来确定用户输入的密码是否正确。同时,由于获取到了MD5摘要后不能反推出原来的密码明文(这是由于MD5算法是一种不可逆的加密算法),即使内部人员可以查看用户信息表也无法知道用户的密码的明文。所以,MD5摘要存储用户的密码或者重要信息字段已经成为大多数应用系统的通用方式。

二、MD5完全安全吗?

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

   所以,目前大多数Web应用都是用了图片输入验证码的功能,这时因为图片上显示的验证码是随机生成的,验证码也是一次性的。每次登录都不同,这样使得工具暴力破解也无用武之地。

三、MD5算法

   MD5算法:Message-Digest Algorithm 5(信息-摘要算法).它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。它需要获得一个随机长度的信息并产生一个128位的信息摘要。

MD5加密算法的实现步骤:

1、MD5算法对输入的数据进行补位,使得如果数据长度Len,有Len%512==448。即Len==K*512+448位,即K*64+56字节。(K是任意整数)。具体补位操作:先补一个1,其余补0至满足要求。

2、补数据长度:用一个64位的数字表示原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。

3、初始化MD5参数。四个32位整数(A,B,C,D)用来计算信息摘要,初始化使用的是十六进制表示的数字

A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210

A,C,C,D为链接变量.

4、处理位操作函数
X、Y、Z为32位整数

以下是每次操作中用到的四个非线性函数(每轮一个)。

  F(X,Y,Z) =(X&Y)|((~X)&Z)

  G(X,Y,Z) =(X&Z)|(Y&(~Z))

  H(X,Y,Z) =X^Y^Z

  I(X,Y,Z)=Y^(X|(~Z))

  (&是与,|是或,~是非,^是异或)

  这四个函数的说明:如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。

5、算法的四轮循环运算。循环的次数是信息中512位信息分组的数目。
    将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。
主循环有四轮,每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量,文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。
主要变换过程:
使用常数组T[1......64].T[i]为32位整数用6进制表示.数据用16个32位的整数数组M[]表示.

具体过程如下:

/*处理数据原文*/

For i = 0 to N /16-1 DO

/*每一次 把数据原文存在16个元素的数组X中。*/

For i=0 to 15 do
set X[i] to M[i*16+J]

END /结束对J的循环
/* SAVE A AS AA,B AS BB,C AS CC,AND D AS DD。*/

AA=A
BB=B
CC=C
DD=D

/*第1轮*/
/* 以[ABCD K S I]表示如下操作

A=B+((a+F(b,c,d)+X[k]+T[i])<<<s).*/
/* do the following 16 operations.*/

[abcd 0 7 1][dabc 1 12 2][CDAB 2 17 3][BCDA 3 22 4]
[abcd 4 7 5][dabc 5 12 6][CDAB 6 17 7][BCDA 7 22 8]
[ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12]
[ABCD 12 7 13][DABC 13 12 14][[CDAB 14 17 15][BCDA 15 22 16]

 

/*第2轮****/

/* 以[ABCD K S I]表示如下操作

A =B+(((A+G(B,C,D)+[K]+t[i]<<<S).*/

/* do THE FOLLWING 16 OPERATIONS.*/

[abcd 1 5 17][DABc 6 9 18[cdab 11 14 19][bcda 0 20 20]
[abcd 5 5 21][dabc 10 9 22][CDAB 15 14 23][BCDA 4 20 24]
[ABCD 9 5 25][DABC 14 9 26][CDAB3 14 27][BCDA 4 20 24]
[ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]

 

第3轮*/

/*[ABCD K S I] A=B+((A+h(B,C,D)x[K]+T[I]<<<S)

[abcd 5 4 33][dabc 8 11 34][cdab 11 16 35][bcda 14 23 36]
[abcd 1 4 37][dabc 4 11 38][cdab 7 16 39][bcda 10 23 40]
[abcd 13 4 41][dabc 0 11 42][cdab 3 16 43][bcda 6 23 44]
[avcd 9 4 45][dabc 12 11 46][cdab 15 16 47][bcda 2 25 48]

 

第4轮*/

A=A+AA
B=B+BB
C=C+CC
D=D+DD
END

结束对i的循环,加密就结束了。输出的结果就是我们看不清楚的16位加密MD5密文了。

 

1
3
分享到:
评论

相关推荐

    C语言MD5算法STM32单片机亲测可用

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家Rivest在1991年设计。...通过 lwIP协议栈中的MD5功能,可以增强系统的安全性和可靠性,特别是在网络通信和数据保护方面。

    MD5算法源码;加密算法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家...由于MD5的安全性已被破解,不推荐用于安全性要求高的场景,如密码存储,但作为学习和理解哈希函数的实例,MD5仍然是非常有价值的。

    java MD5加密算法匹配Discuz用户表密码字段

    在网络安全和数据存储领域,MD5常被用于密码加密,虽然其安全性已不如从前,但因其计算速度快,仍被一些老旧系统或项目所采用,比如Discuz论坛系统。 在Discuz论坛中,用户密码的存储方式是经过MD5算法处理的。当...

    MD5加密算法VC++

    在VC++(Visual C++)环境下,开发人员可以利用C++语言实现MD5加密算法,以确保数据的安全性和完整性。 MD5的主要应用包括数据校验、密码存储和文件完整性检查。在密码存储中,MD5常用于对用户输入的明文密码进行...

    C++实现的MD5算法

    也可以用于密码存储,将用户输入的密码转换为MD5摘要,而不是直接存储明文密码,增加安全性。 总的来说,C++实现的MD5算法是信息安全领域的一个重要工具,理解和掌握其原理和实现方法,对于从事软件开发、网络管理...

    md5算法实现源代码

    MD5的主要应用包括数据完整性校验、文件校验和密码存储等。 MD5算法的工作原理可以分为四个阶段:初始化、分块、处理和结果输出。首先,MD5会将输入的数据通过填充和添加一个128位的附加字段,使其长度为512位的...

    jsp网页中用户登陆密码的MD5加密

    MD5加密是一种常用的密码学哈希函数,用于确保数据的完整性和_authentication。MD5算法是RSA Data Security公司在1992年发布的,用于生成一个128位的哈希值。MD5加密广泛应用于各种领域,包括数据存储、网络传输和...

    MD5算法源码 C语言测试OK

    MD5的主要用途包括数据完整性校验和密码存储,但由于其安全性问题,现在更多用于验证文件的完整性。 C语言实现的MD5算法源码通常包含以下几个核心部分: 1. **MD5结构体**:定义了MD5算法处理过程中所需的四个32位...

    ASP[1]NET实现MD5加密算法

    在网络安全方面,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它可以将任意长度的输入转换为固定长度的输出,通常用于数据校验和密码存储。在ASP.NET中实现MD5加密算法,可以确保用户密码的安全性...

    MD5加密算法

    对于初学者来说,理解MD5的工作原理和C语言实现,有助于深入学习密码学、网络安全和数据校验等相关技术。通过实践,可以更好地掌握这些概念,并能运用到实际项目中,如验证文件完整性、构建安全的登录系统等。同时,...

    MD5算法for delphi

    9. **安全性**:尽管MD5在密码学上已被认为不安全,因为它容易受到碰撞攻击,即找到两个不同的输入产生相同的MD5摘要,但在某些场景下,如数据校验,MD5仍然是实用的。 10. **替代算法**:随着MD5的安全性问题暴露...

    MD5算法实现介绍

    通过以上步骤,MD5算法能够有效地将任意长度的输入转换为固定长度的摘要,这不仅提高了数据处理的效率,也增强了数据的安全性和完整性验证能力。然而,值得注意的是,尽管MD5算法曾经非常流行,但由于存在碰撞攻击的...

    MD5加解密算法

    在信息安全领域,MD5常用于数据完整性校验和密码存储。 ### MD5的基本原理 MD5算法的核心是通过一系列的数学运算,包括位操作、异或、加法、旋转等,将输入的数据分割成多个块,然后经过四个不同的处理阶段:初始...

    md5算法(c++)

    MD5的主要应用在于数据完整性校验和密码存储,但请注意,由于其安全性问题,MD5现在更多用于验证文件的完整性,而不是用于加密敏感信息。 在C++中实现MD5算法,你需要理解以下几个关键概念: 1. **二进制数据与...

    MD5算法源码_JS_Java_Oracle_MySQL

    总的来说,MD5算法在不同编程语言和数据库系统中都有实现,通过这些实现,我们可以在各种环境中进行数据的哈希验证和一致性检查。然而,对于安全性需求较高的场景,应当选择更为安全的哈希算法。

    C语言编写的MD5算法代码

    MD5虽然在安全性方面已不再适合用于加密,但因其快速和广泛支持,仍然在数据校验和简单哈希需求中得到应用。例如,在软件发布时,发布者会提供文件的MD5校验和,用户可以通过计算下载文件的MD5值与之对比,确认文件...

    md5算法完整源码与调用方法

    在IT领域,MD5主要被用于数据完整性校验、文件校验和密码存储等方面。 MD5算法的核心过程分为四个步骤:初始化、字节填充、消息块处理和结果组合。初始化阶段,设置四个32位的中间变量A、B、C和D,它们是MD5算法的...

    java中关于Springboot加密 md5加密,注册密码加密到数据库中的关键语句,md5加密语句.pdf

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它将任意长度的数据转化为固定长度的输出,通常用于数据校验和密码存储。在Spring Boot中,我们可以方便地利用Apache Commons Codec库中的`DigestUtils...

    密码学MD4算法java代码

    总的来说,MD4算法是密码学中的一个重要组成部分,虽然在安全性上已经过时,但它仍然有助于理解哈希函数的工作原理和Java中实现这类功能的方法。在实际开发中,应优先选择更为现代和安全的哈希算法。

    sqlserver MD5函数

    2. **MD5_F**、**MD5_FF**、**MD5_G**、**MD5_GG**、**MD5_H**、**MD5_HH**、**MD5_I**、**MD5_II**: 这些函数分别对应MD5算法中的F、FF、G、GG、H、HH、I、II四个非线性压缩函数的两个版本,用于增强算法的安全性。...

Global site tag (gtag.js) - Google Analytics