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

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

    下面是基于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; /**
* 会员登录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;
}
}

password加密的算法的更多相关文章

  1. 将 Shiro 作为一个许可为基础的应用程序 五:password加密/解密Spring应用

    考虑系统password的安全,眼下大多数系统都不会把password以明文的形式存放到数据库中. 一把会採取下面几种方式对password进行处理 password的存储 "编码" ...

  2. password加密问题

    password加密问题 个人信息:就读于燕大本科软件project专业 眼下大三; 本人博客:google搜索"cqs_2012"就可以; 个人爱好:酷爱数据结构和算法,希望将来 ...

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

    又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮! 转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有 ...

  4. java加密解密算法位运算

    一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...

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

    源代码例如以下: #include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]){ if(arg ...

  6. Java加密AES算法及spring中应用

    开门见山直接贴上代码 .AESUtil加密解密工具类 import java.security.Key; import java.security.SecureRandom; import java. ...

  7. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  8. 一组PHP可逆加密解密算法

    对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加 ...

  9. php常用的对字符串进行加密的算法

    1. 返回文件扩展名 function getformat($file) { $ext=strrchr($file,"."); $format=strtolower($ext);  ...

随机推荐

  1. vue+nodejs+express解决跨域问题

    nodejs+express解决跨域问题,发现网上的大部分都是误导人,花了不少时间,终于弄懂了, 我在vue+nodejs+express+mongodb的项目里面,发现本地用vue代理正常调用远程的 ...

  2. BZOJ 2178 Simpson积分

    思路: 我发现能用Simpson积分水的题  好像都是裸题诶233333 //By SiriusRen #include <bits/stdc++.h> using namespace s ...

  3. 如何查看jdk的版本

    (1)WINDOWS环境下 实验环境:WIN7 64bit 操作指令:cmd命令下输入“java -version” 参考如下:JDK1.7 (2).LINUX环境下 实验环境:CentOS 5.6 ...

  4. ionic2/3 禁止屏幕旋转,禁止横屏,竖屏

    ionic2/ionic3禁止屏幕旋转,及解除禁止旋转 1.添加插件: cmd到项目目录---> cordova plugin add cordova-plugin-screen-orienta ...

  5. win32窗口映射(部分)

    先理解一下“窗口”与“视区”的概念.“窗口”是逻辑坐标下的矩形区域,“视区”是设备坐标系下的区域.根据“窗口”和“视区”的大小可以确定x方向和y方向的比例因子. 例子如下: VOID OnPaint( ...

  6. jQuery——尺寸位置

    获取宽:$(".box").width() 设置宽:$(".box").width(200) 获取高:$(".box").height() ...

  7. Java常用开源jar包

    转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用javaMail时应与mai ...

  8. 实验1 C++函数

    一.实验目的: 掌握定义函数的方法.函数实参与形参的对应关系以及“值传递”的方式. 熟悉函数的嵌套调用和递归调用的方法. 熟悉全局变量.局部变量概念和使用方式. 二.实验内容: 运行调试第2章编程示例 ...

  9. seam的定时轮巡

    青岛的项目要做一个功能,每天凌晨2点的时候保存一次设备数据,这个就要求项目能够间隔24小时每天去做这个事,是一个自主轮巡. seam框架正好提供了这个功能,@Expiration指定开始时间,@Int ...

  10. [转]linux内存管理源码分析 - 页框分配器

    转自: http://www.cnblogs.com/tolimit/ 阅读之前,先敬原作者一杯! 分段和分页 先看一幅图 也就是我们实际中编码时遇到的内存地址并不是对应于实际内存上的地址,我们编码中 ...