password加密的算法

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

  • 用以防止密文被md5字典进行反向暴力破解。
  • 採用美国家安全局发布的加密算法(RFC 4357)加密,不採用自己创建的加密算法,以避免有安全漏洞。

    下面是基于Yii框架的实现代码。

<?

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;

    /**
     * 会员登录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;
    }
}
时间: 2025-01-02 17:05:04

password加密的算法的相关文章

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

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

java加密解密算法位运算

一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算会把加密后的字符串还原为原有字符串的值.效果图如下: 二.实现过程 1 package com.itxxz; 2 3 import java.util.Scanner; 4 5 /** 6 * java加密解密算法 7 * 8 * @author 螃蟹 9 * 网站:IT学习者 10 * 网址:ht

linux 下password加密程序(能够用于替换shadow文件里的用户password)

源代码例如以下: #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]){ if(argc != 3){ printf("%s <salt> <crypt>\n",argv[0]); return -1; } char *passwd = crypt(argv[1],argv[2]); printf("passwd : %s\n",

Java加密AES算法及spring中应用

开门见山直接贴上代码 1.AESUtil加密解密工具类 import java.security.Key; import java.security.SecureRandom; import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; /** * @description: AES加密工具类 * @author: maojialong * @date: 2017年11月7日 上午1

DES加密解密算法

DES加密解密算法 // 仿射变换加解密.cpp : 定义控制台应用程序的入口点. // #include <stdio.h> #include <conio.h> static char key[10], key_a[5], code[8], key_b[5], temp[10], key_aa[8], key_bb[8], l[4], r[4], l_a[4], r_a[4], V[8] = { 0, 1, 0, 1, 0, 1, 0, 1 }, b[8]; char Code

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

java/php DES/CBC/PKCS5Padding加密解密算法实现过程

先看java代码 Java代码   public static String encrypt(String message, String key) throws Exception { Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8")); SecretKeyFactory k

RC4加密解密算法

RC4相对是速度快.安全性高的加密算法.在实际应用中,我们可以对安全系数要求高的文本进行多重加密,这样破解就有一定困难了.如下测试给出了先用RC4加密,然后再次用BASE64编码,这样双重锁定,保证数据信息安全(个人见解,不周之处请谅解!). package com.bao.tools.encryption; import java.io.Console;import java.io.IOException;import java.util.Scanner; import org.junit.T

java 实现 DES加密 解密算法

DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种:加密或解密.  DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果:如 Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果.在通信网络的两端,双方约定一致