密码加密的算法

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

  • 用以防止密文被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

密码加密的算法的相关文章

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行.存储在数据库的数据面临很多威胁,有应用程序层面.数据库层面的.操作系统层面的.机房层面的.员工层面的,想做到百分百不被黑客窃取,非常困难. 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码.可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于你独自出远门时缝在内衣里钱,虽然你用到他们的概率不大,但关键时刻他们能救命. 那用加密算法比如AES,把密码加密下再存,需要明文的时候我再解密

C#:使用MD5对用户密码加密与解密

C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&

(三)学习MVC之密码加密及用户登录

1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(string plainText) { SHA256Managed _sha256 = new SHA256Managed(); byte[] _cipherText = _sha256.ComputeHash(Encoding.Default.GetBytes(plainText)); return C

Python Show-Me-the-Code 第 0021题 密码加密

第 0021 题: 通常,登陆某个网站或者 APP,需要使用用户名和密码.密码是如何加密后存储起来的呢?请使用 Python 对密码加密. 阅读资料 用户密码的存储与 Python 示例 阅读资料 Hashing Strings with Python 阅读资料 Python's safest method to store and retrieve passwords from a database 思路: 加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又

转 C#:使用MD5对用户密码加密与解密

C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&

Asp.Net 常用工具类之加密——对称加密DES算法(2)

又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有个家(毕竟年级不小了),有盼头的工作前景. 看到老赵和老跳两位前辈的故事,真实且现实,同时也有一丢丢的小迷茫,敢问路在何方! 感叹一会儿,生命不止,Code不止,继续入坑! 昨天分享了一下非对称加密RSA算法,今天给朋友们分享一下对称加密DES算法案例. 加解密过程: 1.生成加密密钥key,密码越

php与java通用AES加密解密算法

php与java通用AES加密解密算法 AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法. php版代码如下: <?php class CryptAES { protected $cipher = MCRYPT_RIJNDAEL_128; protected $mode = MCRYPT_MODE_ECB; protected

转载 C#使用Salt + Hash来为密码加密

转载 http://www.csharpwin.com/csharpspace/13412r9615.shtml (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码. 解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function).哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的

SSH密码加密登录

实验要求:R1 用SSH远程登录到R2 2.分别进入R1与R2 的f/0接口,配ip地址 R1的ip地址为192.168.1.1/24 R2的ip地址为192.168.1.2/24 (1)建立路由器的账号与密码 (2)为路由器配置一域名 (3)生成一个rsa算法的密钥,密钥为1024 接下来做一个特权模式密 以上就ssh密码加密登录,写的不好的地方,请大家多多建议,谢谢