`

MD5加密算法中的salt

    博客分类:
  • php
 
阅读更多

FROM:http://blog.csdn.net/blade2001/article/details/6341078

 

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。

  加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时), 由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否 正确。

  这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成 的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值 都得和黑客使用的一样才行)。

下面以PHP示例,讲解md5($pass.$salt)加密函数。

<?php
function hash($a) {
    $salt =”Random_KUGBJVY”;  //定义一个salt值,程序员规定下来的随机字符串
    $b=$a.$salt;  //把密码和salt连接
    $b=md5($b);  //执行MD5散列
    return $b;  //返回散列     
}
?>

  调用方式:$new_password =hash ($_POST[password]);   //这里接受表单提交值,并进行加密

  下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。

用户注册时,

  1. 用户输入【账号】和【密码】(以及其他用户信息);
  2. 系统为用户生成【Salt值】;
  3. 系统将【Salt值】和【用户密码】连接到一起;
  4. 对连接后的值进行散列,得到【Hash值】;
  5. 将【Hash值1 】和【Salt值】分别放到数据库中。

用户登录时,

  1. 用户输入【账号】和【密码】;
  2. 系统通过用户名找到与之对应的【Hash值】和【Salt值】;
  3. 系统将【Salt值】和【用户输入的密码】连接到一起;
  4. 对连接后的值进行散列,得到【Hash值2 】(注意是即时运算出来的值);
  5. 比较【Hash值1 】和【Hash值2 】是否相等,相等则表示密码正确,否则表示密码错误。

有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。

分享到:
评论

相关推荐

    MD5加密算法

    对于C语言实现MD5加密,开发者通常会使用开源库,如MD5-master这个项目可能就是提供了一个C语言实现的MD5算法。这类库通常包括MD5的初始化、更新和最终化步骤,以及将计算出的哈希值转换为字符串的功能。测试代码则...

    MD5加密算法C++实现

    在C++中实现MD5加密算法,通常需要借助第三方库,如`openssl`库。以下是一段简单的C++代码示例,展示如何使用`openssl`库进行MD5加密: ```cpp #include &lt;openssl/md5.h&gt; #include #include #include std::...

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

    综上所述,ASP.NET实现MD5加密算法涉及到的主要知识点包括:ASP.NET平台的使用,C#编程语言,MD5哈希算法的原理和应用,以及在Web应用程序中安全存储用户密码的方法。同时,还需要了解SQL数据库的管理和DBA的相关...

    c# md5加密算法的实例

    总结来说,C#中的MD5加密算法可以通过`System.Security.Cryptography`命名空间中的`MD5`类来实现,提供16位和32位两种形式的哈希输出。尽管MD5在某些方面不再被视为足够安全,但在很多场合仍然被广泛使用,特别是在...

    MD5加密算法(JSP)

    以下是关于MD5加密算法及其在JSP中应用的详细知识点: 1. **MD5原理**: - MD5算法由Ronald Rivest在1991年设计,它将输入信息经过多次迭代运算后生成一个固定长度的摘要。这个摘要对输入信息极其敏感,微小的变动...

    vb的md5加密算法

    在VB(Visual Basic)中实现MD5加密算法可以帮助开发者在数据安全、用户认证等领域实现数据的不可逆加密,保护敏感信息。 MD5的主要特点包括: 1. **单向性**:给定一个输入,很容易计算出其MD5摘要,但无法通过...

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

    * MD5加密算法存在密钥长度有限的风险。 因此,在使用MD5加密时,需要采取相应的安全措施,例如使用salt值和密钥加密等。 MD5加密是一种常用的密码学哈希函数,广泛应用于各种领域。但是,需要注意MD5加密的缺点,...

    md5 加密算法 实例下载

    在实例下载中,提供的"WindowsApplication2"可能是一个包含MD5加密算法实现的Windows应用程序。这个程序可能包含以下功能: 1. 用户输入明文字符串,程序计算其MD5哈希值。 2. 对文件的MD5校验,用户可以上传文件,...

    MD5加密算法(java)

    在提供的`MD5Code.java`文件中,应该包含了上述步骤的具体实现,通过阅读和理解这段代码,你可以更深入地了解如何在Java中应用MD5加密算法。不过,实际开发中,我们通常会使用现有的安全库,如Apache Commons Codec...

    MD5加密算法(16位,32) .zip_C# MD5_CSharp MD5 32_MD5 CSharp_md5_md5 32

    标签中的关键词如"c#_md5"、"csharp_md5_32"、"md5_csharp"、"md5"、"md5_32"都与C#和MD5加密算法相关,强调了这是关于C#语言实现MD5哈希的讨论。 根据压缩包子文件的文件名称,我们有两个文件: 1. "MD5加密算法...

    用Javascript写的md5加密算法

    用Javascript写的md5加密算法,可直接调用!

    一种改进的MD5加密算法及应用.pptx

    改进后的MD5加密算法的主要思想是在原始MD5算法的基础上增加随机化机制和盐值(salt)措施。具体实现步骤如下: 1. 增加随机化机制:在算法的起始部分添加一个随机化步骤,即在输入数据后,先对数据进行一次随机...

    JAVA高手MD5加密算法底层源码完美实现

    在JAVA中,MD5主要用于数据的校验和密码的加密,因为它产生的哈希值具有不可逆性,即无法通过哈希值还原原始数据,这为数据安全提供了基础。 MD5算法的基本步骤包括: 1. **初始化:** MD5算法有四个32位的中间...

    加密md5算法

    在提供的代码中,我们看到两种不同的MD5加密方法,它们都是在iOS环境中实现的Objective-C代码: 1. 第一个方法`-(NSString *)md5:(NSString *)str`: 这个方法首先将输入的NSString转换为UTF8编码的C字符串(`...

    JAVA中MD5加密密码算法

    在Java编程语言中,MD5(Message-Digest Algorithm 5)是一种广泛使用的...现在更推荐使用如SHA-256或更强的加密算法。在实际应用中,通常会结合盐值(salt)和多次迭代(如bcrypt或scrypt)来提高密码存储的安全性。

    md5 JavaScript 加密算法

    在JavaScript中,实现MD5加密算法主要用于数据校验、用户密码存储以及文件完整性检查等场景。 JavaScript客户端实现MD5值计算的过程主要包括以下几个步骤: 1. **初始化哈希值**:MD5算法开始时,会设定四个32位的...

    MD5加密就JS文件

    在现代网络应用中,更推荐使用如AES等对称加密算法,以及HTTPS等传输层安全协议来保障数据的安全。 综上所述,"MD5加密就JS文件" 提供了在JavaScript环境中对数据进行MD5加密的能力,这在Web开发中的Ajax请求中尤为...

    ASP.NET实现MD5加密算法

    在ASP.NET中,实现MD5(Message-Digest Algorithm 5)加密算法是常见的安全实践,用于保护敏感数据,如用户密码。MD5是一种广泛使用的哈希函数,它将任意长度的输入转化为固定长度的输出,通常是一个128位的二进制数...

    MD5加密算法网络安全教程

    MD5加密算法的流程包括四个主要步骤:初始化,消息展开,迭代计算和结果输出。在初始化阶段,设置四个32位的中间变量A、B、C和D,它们是MD5算法的核心。接着,消息被分为多个512位的块,并进行一系列复杂的数学运算...

Global site tag (gtag.js) - Google Analytics