加密原理:採用不同的加密算法对字符串进行加盐加密处理。

  • 用以防止密文被md5字典进行反向暴力破解。
  • 採用美国家安全局发布的加密算法(RFC 4357)加密,不採用自己创建的加密算法,以避免有安全漏洞。

    下面是基于Yii框架的实现代码。

<?

php
/**
* 密码加密算法
* 对不同类型密码採用不同的加密算法进行加密处理
* @author yagas<yagas@sina.com>
* @url http://blog.csdn.net/yagas
* @version 0.1
* @example:
* $passwd = new TPassword( TPassword::UserPassword );
* $passwd->encode( "123456" );
* $passwd->ckechPassword( "xxxxxx", "123456" );
*/
class TPassword extends CModel {
/**
* 密码盐长度
* @var int
*/
private $_satlsLen = 5; /**
* 盐在密文中的偏移值
* @var int
*/
private $_offset = 10; /**
* 加密算法名称
* @var string
*/
private $_passwordType; /**
* 会员登录password
* @var string
*/
const UserPassword = "sha224"; /**
* 登陆员登录password
* @var string
*/
const AdminPassword = "snefru256"; /**
* 支付密码
* @var string
*/
const PayPassword = "haval128,3"; public function __construct( $passwordType ) {
$this->_passwordType = $passwordType;
} public function attributeNames() {
return array();
} /**
* 加密字符串
* @param string $password 须要进行加密的字符串
* @param string $satls 加密盐
* @return string 密文
*/
public function encode( $password, $satls=null ) {
if( is_null( $satls ) ) {
$satls = '';
while( strlen( $satls ) > $this->_satlsLen ) {
$i = mt_rand( 65, 90 );
$satls .= chr( $i );
}
}
$password = hash( $this->_passwordType, $password.$satls );
$password = md5( $password );
$newPassword = substr( $password, 0, $this->_offset );
$newPassword .= strtolower( $satls ) . substr( $password, $this->_offset );
return substr( $newPassword, 0, 32 );
} /**
* 验证密码是否正确
* @param string $securtyString 密钥
* @param string $password 密码
* @return boolean
*/
public function checkPassword( $securtyString, $password ) {
$satls = substr( $securtyString, $this->_offset, $this->_satlsLen );
$password = $this->encode( $password, strtoupper( $satls ) );
return $securtyString == $password;
}
}

最新文章

  1. 2016_09_21 Russia is seriously running out of cash_CNN
  2. LayoutInflater的infalte()
  3. UVA 10066 The Twin Towers
  4. VC++ chap13 文档与串行化
  5. svn down代码的时候提示“由于目标计算机积极拒绝,无法连接”
  6. 一些网站的Android客户端
  7. 带缓冲I/O和不带缓冲I/O的区别与联系
  8. ANDROID_MARS学习笔记_S01原始版_008_Handler(异步消息处理机制)
  9. MD5Untils加密工具类
  10. windows8一直更新不了的问题————解决方案
  11. MySQL常用函数 转载
  12. EditPlus自动执行出结果设置
  13. dvtm: 平铺式终端管理器 — LinuxTOY
  14. windows Vista-Server 2016系列激活脚本.cmd
  15. xmlplus 组件设计系列之五 - 选项卡
  16. Win10个性化设置
  17. php Excel 导入功能
  18. LeetCode第十题-正则表达式匹配
  19. Jquery easyUI datagrid遇到空行做判断
  20. Java 内存模型简单剖析

热门文章

  1. Elasticsearch之CURL命令的DELETE
  2. conda python虚拟环境
  3. Sql Server 优化 SQL 查询:如何写出高性能SQL语句
  4. Java单元测试 - TestNG
  5. BZOJ 2626: JZPFAR KDtree + 堆
  6. ceph对接openstack环境
  7. API开发管理平台eoLinker AMS 4.1版本发布:加入聚合空间,发布AMS专业版等
  8. JavaScript 复杂判断的优雅写法
  9. Mac 执行 gulp 报错 -bash: gulp: command not found
  10. Centos下安装mysql(二进制版)