加密原理:采用不同的加密算法对字符串进行加盐加密处理。
- 用以防止密文被md5字典进行反向暴力破解。
- 采用美国家安全局公布的加密算法(RFC 4357)加密,不采用自己创建的加密算法,以避免有安全漏洞。
<?php
/**
* 密码加密算法
* 对不同类型密码采用不同的加密算法进行加密处理
* @author yagas<[email protected]>
* @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;
/**
* 会员登陆密码
* @var string
*/
const UserPassword = "sha224";
/**
* 登陆员登陆密码
* @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;
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-03 05:21:54