`
elvis4139
  • 浏览: 148153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

MD5 SALT 加密

阅读更多
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如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值是要存放在数据库里的。

用户注册时,

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

用户输入【账号】和【密码】;
系统通过用户名找到与之对应的【Hash值】和【Salt值】;
系统将【Salt值】和【用户输入的密码】连接到一起;
对连接后的值进行散列,得到【Hash值2】(注意是即时运算出来的值);
比较【Hash值1】和【Hash值2】是否相等,相等则表示密码正确,否则表示密码错误。
有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。

您是否遇见过破解不了的MD5值?你是否遇见过‘奇形怪状’的hash?这些非常有可能就是带有salt(俗称加盐值),本文将为大家简单的介绍关于加盐值的一些信息。

0×01. 什么是加盐值?
为了加强MD5的安全性(本身是不可逆的),从而加入了新的算法部分即加盐值,加盐值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样,使用不同的加盐值产生的最终密文是不一样的。



0×02. 代码中如何使用加盐值?
由于使用加盐值以后的密码相当的安全,即便是你获得了其中的salt和最终密文,破解也是一个耗费相当多时间的过程,可以说是破解单纯MD5的好几倍,那么使用加盐值以后的密文是如何产生的呢?
1).首先我们得到的是明文的hash值
2).进行计算获取MD5明文hash值
3).随机生成加盐值并插入
4).MD5插入加盐值得到的hash
5).得到最终的密文



0×03. 如何破解出带有加盐值的密文
因为像windows hash(未进行syskey加密)、非加盐值MD5等都可以通过大型的密码(如彩虹表)表进行对比解密,所以相对而言相当的轻松,而带有加盐值的密文就相对而言复杂的多,现在的MD5表大概是260+G,如何加盐值的可能性有10000个,那么密码表的应该是MD5 size*10000,就可以解密出原MD5表能够解密的密码了,一些网站也提供了对应的salt解密,但是测试以后效果并不是非常好,如常规的admin888也未解密出,实在是遗憾,毕竟MD5本是不可逆的,带入随机值解密出最终密码的可能性就更低了,至少是相对大多数人而言的。



0×04. 含加盐值MD5算法的应用
目前多家的网站程序公司都已经加入了该算法,如常见的VBB论坛、discuz论坛等都采用了,甚至著名的Linux开源操作系统早已经加入了这种加密模式。可得而知,这种算法势必会在未来应用于更多的范围。
分享到:
评论

相关推荐

    MD5加密工具包可配置salt值

    MD5加密工具类,内置注释代码,可以调用配置文件,通过文件设置salt,增加破解难度。

    MD5加密解密生成器

    MD5(MD5(MD5($pass)))、sha1、md4、mysql、mysql5、md5($pass.$salt) md5($salt.$pass)、md5(md5($pass)。$salt)、sha1($salt.$pass) Md5(Phpbb3)、Md5(Wordpress)、Md5(Unix)、Des(Unix)

    MD5加密demo

    MD5(Message-Digest Algorithm 5)是一种广泛使用...这个"MD5加密demo"提供了一个完整的MD5加密示例,可以帮助初学者快速理解和应用MD5。通过学习和实践,可以更好地理解哈希函数的工作原理,以及在实际项目中的应用。

    RSA+MD5+salt 加密 支持sql 和access数据库

    RSA加密工具 利用RSA+MD5+salt 加密后 可以导出csv文件,加密的csv文件可以导入进行解密

    Md5加密jar包

    一种可能的情况是,一个jar包提供了基础的MD5加密功能,而另一个则可能包含了一些额外的功能,比如加盐(salt)处理,提高密码的安全性,或者支持多线程批量加密等。加盐是密码学中常见的增强安全性的方式,通过在...

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

    因此,在使用MD5加密时,需要采取相应的安全措施,例如使用salt值和密钥加密等。 MD5加密是一种常用的密码学哈希函数,广泛应用于各种领域。但是,需要注意MD5加密的缺点,并采取相应的安全措施,以确保数据的安全...

    MD5加密实例(加盐)

    "加盐"是在MD5加密中增加额外安全性的技术。在密码存储中,"盐"是一段随机数据,与原始密码一起输入到MD5算法中,生成的哈希值包含了盐的信息,使得即使两个用户有相同的密码,其哈希值也会因为盐的不同而不同。这种...

    如何给MD5加上salt随机盐值

    不知道大家知不知道,在开发的时候如果直接给密码散列,黑客可以通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。但如果加上salt后就会难上很多,即便是你获得了其中的salt和最终密文,破解也是相当麻烦...

    MD5加密就JS文件

    `hex_md5(需要加密的字符串)` 是一个典型的MD5加密函数调用方式,其中`hex_md5`是函数名,括号内的是待加密的字符串。这个函数会返回一个32位的16进制表示的MD5摘要。例如,如果你有一个字符串 "hello",经过`hex_md...

    MD5 加密解密例子

    在实际项目中,为了增强安全性,通常会结合盐值(Salt)进行MD5加密。盐值是一个随机生成的字符串,与原始密码结合后再进行哈希运算,这样即使相同的密码也会生成不同的哈希值,大大增加了破解的难度。 在Struts、...

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

    为了增加安全性,通常会结合加盐(Salt)策略,即在密码前或后添加一个随机字符串再进行MD5加密,这样即使两个用户使用相同的密码,其加密结果也会不同,从而降低彩虹表攻击的风险。此外,还可以使用多次迭代的哈希...

    Md5加密(dos下操作)

    如果你收到的压缩包文件名为“MD5加密(dos操作)”,里面可能包含一个DOS下的MD5加密指南或者工具,帮助用户理解如何在DOS环境下进行MD5操作。了解这个过程对于理解基础的网络安全和数据完整性概念是非常有价值的,但...

    JS(javascript)-md5加密工具类

    JavaScript中的MD5加密工具类是用于对数据进行安全哈希的一种方法,广泛应用于密码存储、数据完整性校验等场景。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的输入转化为固定长度的...

    C# MD5方式 加密示例

    MD5(Message-Digest Algorithm 5)是一种广泛用于数据校验和加密的哈希函数,主要特点是计算速度快、结果固定长度。在C#编程中,MD5加密常常用于存储密码时进行不可逆的处理,以保护用户的隐私信息。本文将详细介绍...

    md5加密,原生js使用md5加密

    - 盐值(Salt)的使用:为了进一步提高安全性,通常会在密码前添加一个随机的盐值再进行MD5加密。这样即使两个用户使用相同的密码,它们的MD5值也会不同,增加了破解的难度。 - 更安全的哈希算法:虽然MD5已经不被...

    JavaScript前端md5加密

    JavaScript前端MD5加密是一种常见的数据安全处理技术,用于在客户端对敏感信息进行预处理,以保护数据不被轻易破解。MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能将任意长度的输入转化为固定...

    MD5密码加密文档

    MD5(Message-Digest Algorithm 5)是一种广泛应用于网络安全领域的哈希函数,它能够将任意长度的数据转换为固定长度的摘要信息。这个过程是不可逆的,也就是说,从MD5摘要无法还原原始数据,这就为数据的安全存储和...

    C# MD5加密实例

    在C#中,我们可以使用System.Security.Cryptography命名空间中的MD5类来实现MD5加密。下面是一个具体的C# MD5加密的实例: ```csharp using System; using System.Text; using System.Security.Cryptography; ...

    几个MD5加密的例子

    MD5-2、MD5-3和MD5-4可能分别展示了不同加密方式或不同输入数据的MD5值,比如使用盐值(salt)增强加密的安全性。 盐值是一种随机数据,附加到原始密码之前或之后再进行MD5加密,这样即使相同的密码也会产生不同的...

    delphi MD5加密的用法

    然而,MD5由于其安全性已不再足够,现在更推荐使用SHA-256或其他更强的哈希算法,并结合加盐(salt)和多次迭代来进一步提高安全性。 在实际应用中,你可能还需要考虑线程安全、错误处理等细节。通过`MD5使用DEMO`...

Global site tag (gtag.js) - Google Analytics