码迷,mamicode.com
首页 > 编程语言 > 详细

密码加密的算法

时间:2015-07-05 09:33:33      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:php   加密技术   加密   

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

  • 用以防止密文被md5字典进行反向暴力破解。
  • 采用美国家安全局公布的加密算法(RFC 4357)加密,不采用自己创建的加密算法,以避免有安全漏洞。
<?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;

    /**
     * 会员登陆密码
     * @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;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

密码加密的算法

标签:php   加密技术   加密   

原文地址:http://blog.csdn.net/yagas/article/details/46760631

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!