首页 > 学院 > 逻辑算法 > 正文

密码加密的算法

2020-03-22 19:18:51
字体:
来源:转载
供稿:网友
  • 加密原理:采用不同的加密算法对字符串进行加盐加密处理。

    用以防止密文被md5字典进行反向暴力破解。

    采用美国家安全局公布的加密算法(RFC 4357)加密,不采用自己创建的加密算法,以避免有安全漏洞。

    以下是基于html' target='_blank'>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;    /**     * 会员登陆密码     * @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编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表