给MD5加上salt随机盐值加密算法实现密码安全的php实现

如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。
加上salt后就会难上很多可以一定程度上解决问题,即便是黑客获得了其中的salt和最终密文,破解也是相当麻烦的。

PS: 一般都是加密后的数据再存入到数据库的,安全的数据是不可逆的,即数据库里面的数据即使你知道他是通过md5,加盐md5,base64等算法加密进去的也不可直接反推出内容,一般是通过输入的内容加上加密算法后得出的跟数据库里面对比。很多破解是用社工库进行撞库对比,你的帐号密码在其他不安全网站给破解后拿来到其他网站尝试撞库。

如何加点盐(salt)?
为了加强MD5的安全性加入了新的算法部分即加盐值,然后散列,再比较散列值,已确定密码是否正确。
加盐值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样,使用不同的加盐值产生的最终密文是不一样的:
1).得到明文的值
2).进行计算获取MD5明文hash值
3).随机生成加盐值并插入
4).MD5插入加盐值得到的hash
5).得到最终的密文

看一个简单的加salt函数:
function do_hash($psw) {
$salt = 'aFXBxYmkClsw46y7b8C5qN56zs'; //定义一个salt值,最好够长,或者随机
return md5($psw,$salt); //返回加salt后的散列
}

注意:如果你是随机生成salt值就得放入数据库,不要用time()时间戳,避免被枚举破解,简单点可以配置一个固定salt值,如上。

一种复杂点加密方法:
function passCrypt($psw)
{
  $psw=md5($psw);
  $salt=substr($psw,-1,3);
  $psw=crypt($psw,$salt);
  return $psw;
}
先把密码用MD5加密,然后截取其结果的一段,再用crypt加密,这两个加密函数都是单向的,而且加密后的最终密码是13位的,无论谁拿到手都不知道该怎么破解了,在密码验证时只需要将原始密码用加密函数再加密一遍进行匹配就行了。

给MD5加上salt随机盐值加密算法实现密码安全的php实现的更多相关文章

  1. MD5随机盐值生成法

    public class Test3 { /** * 生成含有随机盐的密码 */ public static String generate(String password) { Random r = ...

  2. MD5加密解密以及设置salt(盐值)

    MD5算法 package com.oracle.jsp.util; import java.security.MessageDigest; import java.security.NoSuchAl ...

  3. nodejs进阶:密码加盐:随机盐值

    demo var crypto = require('crypto'); function getRandomSalt(){ return Math.random().toString().slice ...

  4. (转)浅谈MD5加密算法中的加盐值(SALT)

    我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就 ...

  5. Web应用你加盐了吗?——浅谈MD5加密算法中的加盐值(SALT)

    转自:http://blog.csdn.net/blade2001/article/details/6341078 我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散 ...

  6. (转,学习记录)MD5加密算法中的加盐值(SALT)

    我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就 ...

  7. 用户角色权限查询添加bug集锦 用户密码加密 MD5 加盐 随机盐 spring的加密bcrypt

    package cn.itcast.encode; import org.apache.commons.lang3.RandomStringUtils; import org.springframew ...

  8. Spring Security中的MD5盐值加密

    在 spring Security 文档中有这么一句话: "盐值的原理非常简单,就是先把密码和盐值指定的内容合并在一起,再使用md5对合并后的内容进行演算,这样一来,就算密码是一个很常见的字 ...

  9. 一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密

    什么是MD5? MD5(Message Digest Algorithm 5,信息摘要算法5),是计算机广泛使用的摘要算法(又称哈希算法)之一.MD5是将一段信息,通过其不可逆的字符串变换算法,产生了 ...

随机推荐

  1. 分享一下怎么开发一款图片视频类App,秒拍和prisma

    第一步,分解短视频App的功能 我们在秒拍官网看到如此描述: [视频拍摄及导入]支持直接拍摄及导入手机本地的视频 [照片电影]照片专属特效,轻松创作照片电影 [MV特效]10余款全新MV特效,让普通视 ...

  2. Winform项目调用asp.net数据接口

    最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据.刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么 ...

  3. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  4. 逻辑卷管理LVM (Logical Volume Manager)

    什么是LVM? LVM(Logical Volume Manager)逻辑卷管理,是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的 ...

  5. AE设置投影而非重投影IGeoDatasetSchemaEdit

    AE设置投影而非重投影 读取一个jpg格式的影像,包含jgw文件,这时设置投影.赋值操作. IRasterDataset raster = rasterWsp.OpenRasterDataset(Fi ...

  6. cocos2dx 3.x(获取当前系统时间)

    // // MainScene.cpp // helloworld // // Created by apple on 16/10/21. // // #include "MainScene ...

  7. iOS - (几个 button 按钮之间的单选与多选)

    先来看看效果图: 下面是实现的代码: 首先创建10个button(一个一个写太麻烦了,个人认为还是用一个 for 循环来创建比较好) 下面就是 button 的点击方法实现单选 多选的比较好做,写法也 ...

  8. python MySQLdb中文乱码

    Python操作MySQL需要安装Python-MySQL可以从网上搜索一下,和一般的Python包一样安装 安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用,试验 ...

  9. HttpwebClient的四种请求方式

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.      本文旨在发布代码,供自己参考,也供大家参考,谢谢. 正题: Ht ...

  10. Swift游戏实战-跑酷熊猫 04 熊猫的跳和滚的动作

    这节内容,我们利用上一节学过的内容,给熊猫添加跳和滚动的动作.同时通过重载touchBegan方法来响应动作.切换跑,跳,滚. 要点: 通过序列帧纹理产生动画: SKAction.animatWith ...