加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。无论何时只要口令改变,随机数就改变。随机数以未加密的方式存放在口令文件中,这样每个人都可以读。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中。

在应用中,出于到安全的考虑和数据的保密,需要使用到加密算法,有时候为了让加密的的结果更加扑朔迷离神鬼莫测一些,常常会给被加密的数据加点“盐”。说白了,盐就是一串数字,完全是自己定义的,不多说,上实例。

/*** 获取当前用户盐** @param string $extraKey 额外密钥* @return string*/public function getSalt($extraKey = null){// 今天凌晨5点以后~第二天凌晨5点前if (date('G') >= 5) {$dateString = date('md');}// 今天凌晨5点前// 日期标示符仍用昨天的else {$dateString = date('md', strtotime('-1 day'));}return md5('VoyageMobile:' . $dateString . ':' . $this->_uid . ':' . $extraKey);}

这就是我们程序中,使用的一个生成盐值的函数,这函数的返回值就是所谓的盐值,请注意这个函数的命名,哈哈。 函数的使用如下:

/*** 加密** @param string $content 待加密内容* @param string $extraKey 额外密钥* @return string*/public function encrypt($content, $extraKey = null){return Helper_Cryption_Rijndael::encrypt($content, $this->getSalt($extraKey));}

为什么我们要使用盐值。 在回答这个问题之前,我们讨论一下加密算法,常用的加密算法大致分为两种:可逆和不可逆,如MD5()不可逆 。RijnDael可逆。

在不可逆的加密算法中,加盐值通常是“锦上添花”,因为类似于Md5()这样的算法已经够用了,如果还担心的会被暴力破解的话,可加点盐。 如:

md5('VoyageMobile:' . $this->getSalt($extraKey));

重点是在可逆的算法中使用加盐值。

在我们的游戏中,我们需要对用户ID即UID使用可逆算法加密,为什么呢,如果不加密会很危险,例如,其它玩家获取到你的UID可以重复攻击你,或者改一下UID就可以攻击其他玩家,在造船厂,改一下船的ID,如果后台不验证,就可以随意造船了,这就是串号攻击。还有一个特殊的情况,如果我知道了一个装备的ID, 如果这个装备恰好是赠品,不能在商店出售, 我可以伪造一个URL请求购买,这个时候,后台判断这个商品确实存在(因为它是赠品),所以可能购买成功。

这个时候就要对ID加密了,而且还是可逆的,因为我需要知道你将要攻击谁,购买什么装备,对吧。这个时候或许加盐的必要性还是没有体现出来,因为我对ID加密就比较安全了,这样就可以 防止串号 了,何必还有一个加盐值。

请注意,会有这样的情况,在活动模块中,我得到一个装备,我虽然不知道itemId,当是我知道了这个装备ID加密后的一串数字。然后我就去拿这个数字去商店里面购买这个装备,而这个装备又是不能购买的。在数据库中,我们把不能购买的装备的价格设置为0,并且和能购买的装备放在一个表中。 注意,这样的设计导致我能够购买到这个装备,而且一毛钱不花!

怎样解决这个问题,我们就需要加盐了。思路就是,在活动模块中,给所有的装备加密使用盐值,在商店模块中,也给所有的装备加盐,使用不同的盐值。这样的结果就是同一个装备,在不同的模块itemId也是不同的。

在后台也需要加一个判断,这个装备是否能购买!

这就是加盐的一个好处。

需要注意点:

保证盐值的唯一行,在我们游戏中,通常会使用到玩家UID造盐,这样,不同的玩家看到的加密后的字符串也不一样。

保证盐值的时效性,这也是出于安全的考虑,经常换盐值,这样加密后的字符串也是变动的,不容易找到规律。

什么是盐加密 为什么使用盐加密密码相关推荐

  1. 加密和解密盐的使用_码农吐糟面试官:居然问我md5是对称加密还是非对称,故意的吧?...

    说起密码一词,好多人都不陌生,不论是技术人员还是非技术人员都有接触,对于一般的用户来说,他们眼中的密码无非就是登录时的那个*标记的字符串而已,对于技术人员来说,提起密码可能能想到很多,比如加密算法,可 ...

  2. Python项目-Day26-数据加密-hash加盐加密-token-jwt

    Python项目-Day26-数据加密-hash加盐加密-token-jwt 数据加密 import hashlibpwd='a123456' #sha1的参数必须是二进制 temp=hashlib. ...

  3. JAVA实现MD5带盐加密_MD5加盐加密

    标签: package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Rando ...

  4. 数据库密码MD5加密、加盐的理解

    一.MD5加密 1)为什么?如果数据库里用户账号的密码没有加密处理,如果数据库被盗,密码被知道导致用户数据被窃取,这是很危险的.数据库里存放密码的密文会安全一点,密码安全性高的话破解也需要时间. 2) ...

  5. MD5加密、加盐和去盐

    前言 在程序里有一些敏感信息需要加密.下面列一下常见的加密: 散列加密 MD5是不可逆.不能解密.速度快等特点. 对称加密法:根据相同的钥匙,进行加密和解密 大数据量的加密和解密. 不对称加密法:两把 ...

  6. 【密码加密】【MD5加密】【盐值加密】

    加密方式 MD5加密 盐值加密 实际开发中的应用 MD5加密 MD5加密方式,可以对文件或者值进行读取加密,并且这个密码是不可逆的,也就是不能被破解 利用第三方类库实现加密 //常用的MD5加密 St ...

  7. 前端(Vue)sha512加密、后端(Java)sha512加密后加盐实现完整流程

    搜索时发现sha512加密(加盐)的内容很少 所以过来添一块砖 文章目录 写在前面 一.理解一下SHA512加盐 二.前端项目实现SHA512加密 1.前端页面中引入js工具类 2.调用CryptoJ ...

  8. 序列化加密字段_自动加密可序列化的类

    序列化加密字段 在Coursera安全顶峰项目的验尸讨论中提出了一个疯狂的想法. 类可以在序列化期间自行加密吗? 这主要是学术上的"假设"练习. 很难想到这样一种情况,我们希望在持 ...

  9. Python代码实现MD5、AES对称加密和RSA非对称加密以及OpenSSl实践

    1.MD5加密算法 1.1 MD5加密的特点 不可逆运算 对不同的数据加密的结果是定长的32位和16位字符(不管文件多大都一样) 对相同的数据加密,得到的结果是一样的(也就是复制). 抗修改性 :信息 ...

最新文章

  1. WINDOWS SERVER 2003从入门到精通之配置DHCP服务器(上)
  2. HEVC视频编码技术
  3. mysql可连接_mysql开启远程可连接
  4. HDU1812 - Count the Tetris
  5. 【Python】万花筒
  6. Ubuntu10.04下配置和使用JDK-Mysql-Tomcat-SVN
  7. 【DP】LeetCode 64. Minimum Path Sum
  8. python编程心得体会-python核心编程____学习心得____part1
  9. 如何拼局域网所有ip_如何查看局域网内所有ip?
  10. android dagger2 讲解,用Dagger2在Android中实现依赖注入
  11. Simulink中步长、powergui采样时间、模块采样时间、控制周期的关系
  12. 在linux平台上如何修改hostid
  13. cmake未找到命令解决
  14. pixhawk之NSH调试
  15. 电机驱动电路中的Snubber网络设计
  16. UE4 UDP是如何进行可靠传输的
  17. 台式电脑增加算数计算机,台式电脑如何增加硬盘数量
  18. flex+php ria应用开发实战详解光盘,《Flex+PHPRIA应用开发实战详解-梁文新版》学习日记2...
  19. 【论文阅读】DeepGauge: multi-granularity testing criteria for deep learning systems.
  20. 华为OD机试 - 高矮个子排队

热门文章

  1. 软件测评公司怎么选?口碑好的测评公司推荐
  2. 中国量子计算机应用普及,郭光灿院士专访:量子产业全梳理,15年后量子计算机或可普及...
  3. python2和python3的区别
  4. 工厂模式与策略模式之区别
  5. 虚函数、虚函数表、虚继承
  6. 南宁市第二十六中学:教研路漫漫,花香伴我行
  7. 试题 历届真题 机器人行走(C语言实现)
  8. 程序员年薪20万、30万、40万都是如何生活的?
  9. 每日文献:2018-01-29
  10. Unity 2D游戏:代码控制精灵图片切换做出帧动画效果