password加密的算法
2024-08-26 08:21:10
加密原理:採用不同的加密算法对字符串进行加盐加密处理。
- 用以防止密文被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;
}
}
最新文章
- 2016_09_21 Russia is seriously running out of cash_CNN
- LayoutInflater的infalte()
- UVA 10066 The Twin Towers
- VC++ chap13 文档与串行化
- svn down代码的时候提示“由于目标计算机积极拒绝,无法连接”
- 一些网站的Android客户端
- 带缓冲I/O和不带缓冲I/O的区别与联系
- ANDROID_MARS学习笔记_S01原始版_008_Handler(异步消息处理机制)
- MD5Untils加密工具类
- windows8一直更新不了的问题————解决方案
- MySQL常用函数 转载
- EditPlus自动执行出结果设置
- dvtm: 平铺式终端管理器 — LinuxTOY
- windows Vista-Server 2016系列激活脚本.cmd
- xmlplus 组件设计系列之五 - 选项卡
- Win10个性化设置
- php Excel 导入功能
- LeetCode第十题-正则表达式匹配
- Jquery easyUI datagrid遇到空行做判断
- Java 内存模型简单剖析
热门文章
- Elasticsearch之CURL命令的DELETE
- conda python虚拟环境
- Sql Server 优化 SQL 查询:如何写出高性能SQL语句
- Java单元测试 - TestNG
- BZOJ 2626: JZPFAR KDtree + 堆
- ceph对接openstack环境
- API开发管理平台eoLinker AMS 4.1版本发布:加入聚合空间,发布AMS专业版等
- JavaScript 复杂判断的优雅写法
- Mac 执行 gulp 报错 -bash: gulp: command not found
- Centos下安装mysql(二进制版)