- 浏览: 677283 次
- 来自: 北京
文章分类
最新评论
-
flyer0126:
freezingsky 写道想想以前自己玩ubuntu的时候, ...
Ubuntu Gnome 1404 64位 WineQQ2013 无法运行解决 -
flyer0126:
kuchaguangjie 写道ubuntu gnome? 我 ...
Ubuntu Gnome 1404 64位 WineQQ2013 无法运行解决 -
kuchaguangjie:
ubuntu gnome? 我已经放弃 ubuntu 桌面了, ...
Ubuntu Gnome 1404 64位 WineQQ2013 无法运行解决 -
freezingsky:
想想以前自己玩ubuntu的时候,在那里wine 个QQ,就觉 ...
Ubuntu Gnome 1404 64位 WineQQ2013 无法运行解决 -
f43310:
不错,学习了!
PHP操作Mysql存储过程
PS:原创文章,如需转载,请注明出处,谢谢!
本文地址: http://flyer0126.iteye.com/blog/ 1753735
PHP的加密函数crypt(), 这一函数完成被称作单向加密的功能,它可以加密一些明码,但不能够将密码转换为原来的明码,这种方式相对来讲比较安全。
<?php // 可用散列允许的最长可用盐值 print "My system salt size is: ". CRYPT_SALT_LENGTH."<br/>"; // 测试串 $str = "flyer0126"; // 执行加密 $salt = substr($str, 0, 2); $pass = crypt($str, $salt); // 将$pass存入数据库,下次使用时可使用相同算法进行验证 ...... echo $pass; // flmnB14trocYs
注:$salt 作为可选的盐值字符串。如果没有提供,算法行为将由不同的算法实现决定,并可能导致不可预料的结果。
相比之下,PHP的扩展Mcrypt功能就强大很多了,它是一个功能强大的加密扩展库。Mcrypt的优点不仅仅在于其提供的加密算法较多,还在于它可以对数据进行加/解密处理。
1. 安装
windows下默认已经打包好所需要的库,这点可以在phpinfo() 中验证是否存在mcrypt 模块。
Linux版的PHP自身不打包该库,需要自行到官方网站下载代码进行编译安装。
2. 介绍
参数:
1). cipher
One of the MCRYPT_ciphername constants, or the name of the algorithm as string.
2). key
The key with which the data will be encrypted. If it's smaller than the required keysize, it is padded with '\0'. It is better not to use ASCII strings for keys. It is recommended to use the mhash functions to create a key from a string.
3). data
The data that will be encrypted with the given cipher and mode. If the size of the data is not n * blocksize, the data will be padded with '\0'. The returned crypttext can be larger than the size of the data that was given by data.
4). mode
One of the MCRYPT_MODE_modename constants, or one of the following strings: "ecb", "cbc", "cfb", "ofb", "nofb" or "stream".
5). iv
Used for the initialization in CBC, CFB, OFB modes, and in some algorithms in STREAM mode. If you do not supply an IV, while it is needed for an algorithm, the function issues a warning and uses an IV with all its bytes set to '\0'.
Mcrypt支持四种块加密模型:
1).MCRYPT_MODE_ECB
(electronic codebook) 适合对小数量随机数据的加密,比如加密用户的登录密码之类的。
2).MCRYPT_MODE_CBC (cipher block chaining) 适合加密安全等级较高的重要文件类型。
3).
MCRYPT_MODE_CFB (
cipher feedback
) 适合于需要对数据流的每一个字节进行加密的场合。
4).MCRYPT_MODE_OFB
(output feedback, in 8bit)
和CFB模式兼容,但比CFB模式更安全。CFB模式会引起加密的错误扩散,如果一个byte出错,则其后续的所有byte都会出错。OFB模式则不会有
此问题。但该模式的安全度不是很高,不建议使用。
5).
MCRYPT_MODE_NOFB (output feedback, in nbit) 和OFB兼容,由于采用了块操作算法,安全度更高。
6).
MCRYPT_MODE_STREAM 是为了WAKE或者RC4等流加密算法提供的额外模型。
NOFB和STREAM仅当mycrypt的版本号大于等于
libmcrypt-2.4.x才有效。
3. 应用
<?php /** * 扩展Mcrypt应用类--加密解密 * @author flyer0126 * @since 2012/12 */ class Mcrypt { // 加密密钥 private $key = ''; // 加密算法 private $cipher = ''; // 加密模式 private $mode = ''; /** * 构造器 * @param [type] $cipher [description] */ function __construct($cipher) { if (!function_exists('mcrypt_module_open')) { return false; } if (empty($cipher)) { return false; } $this->cipher = $cipher; } /** * 设置mode * @param [type] $mode [description] */ function setMode($mode) { if (!strlen($mode)) { return false; } if (!in_array($mode, mcrypt_list_modes())) { return false; } $this->mode = $mode; } /** * 设置mode * @param [type] $key [description] * @return [type] [description] */ function setkey($key) { if (empty($key)) { return false; } $vi_size = $this->get_iv_size(); $key = hash('md5', $key); $this->key = strlen($key)>$vi_size ? substr($key, 0, $vi_size) : $key; } /** * 获取vi_size * @return [type] [description] */ function get_iv_size() { if (empty($this->cipher) || empty($this->mode)) { return false; } return mcrypt_get_iv_size($this->cipher, $this->mode); } /** * 获取iv * @return [type] [description] */ function get_iv() { $vi_size = $this->get_iv_size(); return mcrypt_create_iv($vi_size); } /** * 加密 * @param [type] $data [description] * @return [type] [description] */ function encrypt($data=null) { if (null == $data || empty($this->key)) { var_dump($this);return false; } // CFB和OFB是必须有IV, CBC和EBC则是可选的 $vi = $this->get_iv(); if (in_array($this->mode, array(MCRYPT_MODE_OFB, MCRYPT_MODE_CFB)) && empty($vi)) { exit("Error: vi is empty."); } return mcrypt_encrypt($this->cipher, $this->key, $data, $this->mode, $vi); } /** * 解密 * @param [type] $data [description] * @return [type] [description] */ function decrypt($data = null) { if (null == $data) { return false; } $vi = $this->get_iv(); return mcrypt_decrypt($this->cipher, $this->key, $data, $this->mode, $vi); } }
测试应用如下:
<?php // 测试内容 $data = "这是一段测试内容,by flyer0126 at 2012/12/25"; // 密钥 $key = "key:111"; // 密码类型 $cipher = MCRYPT_DES; // 密码模式 $mode = MCRYPT_MODE_ECB; // 测试Mcrypt的加密解密功能 $mc = new Mcrypt($cipher); $mc->setMode($mode); $mc->setkey($key); $ret = $mc->encrypt($data); $dret = $mc->decrypt($ret); // 输出 echo '$ret:'.$ret."<br/>".'$dret:'.$dret;exit; /** 输出内容(utf-8编码) **/ $ret:�c�qK:~�E']�!%@��#�(���`��0�=�J��1� �o�h0�Yv� $dret:这是一段测试内容,by flyer0126 at 2012/12/25
可能会出现的几个常见问题:
1). Warning: mcrypt_encrypt() [function.mcrypt-encrypt]: Attempt to use an empty IV, which is NOT recommend in ...
原因:需要iv的加密模式加密时没有提供有效的iv,此类模式包括:CBC, CFB, OFB。
2). Warning: mcrypt_encrypt() [function.mcrypt-encrypt() Size of key is too large for this algorithm
原因:key值处理问题,key值经md5加密后,增强安全性,需要根据vi_size的值进行截取,否则输出长度警告。
评论
It is important to note that all cipher modes except ecb require the same IV to be used in decryption as was used in encryption.
即除了 ecb 模式,其他模式要求 加密跟解密使用的iv值是一样的,而 解密方法调用的 get_iv 并不能保证是一样的
多谢提醒,稍后有时间我看下
It is important to note that all cipher modes except ecb require the same IV to be used in decryption as was used in encryption.
即除了 ecb 模式,其他模式要求 加密跟解密使用的iv值是一样的,而 解密方法调用的 get_iv 并不能保证是一样的
发表评论
-
API 中签名的使用
2020-02-14 12:53 526PS:原创文章,如需转载,请注明出处,谢谢! ... -
Linux安装php-vld扩展
2018-07-26 20:34 1468PS:原创文章,如需转 ... -
PHP判断内网/外网IP
2017-11-08 21:33 1303工作中用到PHP来判断内外网IP,查找资料 ... -
PHP 利用json_decode解析json为null问题解决
2017-07-04 20:21 4839PS:原创文章,如需转载,请注明出处,谢谢! ... -
PHP垃圾回收机制
2017-05-15 11:55 0PHP 5.3的新的垃圾回收机制(也就是GC)的特点。 ... -
【转】多线程下的fork及写时复制导致的性能问题
2017-01-05 10:59 1372转发文章 原文地址:h ... -
PHP浮点数精度损失问题
2016-10-28 19:42 2162首先抛出一个问题,如下类似: <?p ... -
【转】HHVM是如何提升PHP性能的?
2016-09-06 09:48 759转载文章,原文地址:http://wuduoyi.com/ ... -
【转】PHP的两个特性导致waf绕过注入
2016-08-25 10:10 10921、HPP HTTP参数污染 HTTP参数污染指的是,在 ... -
PHP之APC缓存
2016-01-25 15:29 1170一、APC缓存简介 APC,全称是Alternativ ... -
php in_array的低性能
2016-01-12 15:39 4634PS:原创文章,如需转载,请注明出处,谢谢! ... -
php 获取文件mime类型的方法
2016-01-06 16:29 1723转载文章,原文地址:http://blog.csdn.ne ... -
apt-get install php5-mcrypt 扩展查不到问题解决
2015-06-25 19:12 743问题记录,以备后期查看。 利用apt ... -
Amfphp简单使用整理
2015-03-04 19:28 2508PS:原创文章,如需转载,请注明出处,谢谢! ... -
【转】php_screw 1.5:php加密: 安装与使用
2015-01-05 18:32 1556最近想把接口P ... -
Slim与NotORM搭建轻量级curd服务实践
2014-09-04 20:05 3301PS:原创文章,如需转载,请注明出处,谢谢! ... -
Ubuntu 1404安装Nginx+php5-fpm 502问题解决
2014-08-17 17:14 2648PS:原创文章,如需 ... -
解析PHP中SESSION原理及大型网站应用注意问题
2014-08-13 15:49 1455PHP SESSION原理我们知道,session是在服务器 ... -
VtigerCRM 报错:1REAL: , ROOT: /var/www/crm/Sorry!解决
2014-08-12 12:18 2112PS:原创文章,如需转载,请注明出处,谢谢! ... -
PHP文件上传错误值
2014-07-21 18:00 739switch ($_FILES['Filedata' ...
相关推荐
而`php-mcrypt`则是PHP的Mcrypt扩展,使得PHP能够调用`libmcrypt`库中的函数进行加密和解密操作。在本案例中,我们有两个相关的RPM(Red Hat Package Manager)文件:`libmcrypt-2.5.8-9.el6.i686.rpm` 和 `...
标题中的"php-mcrypt-1.0.3-7.3-ts-vc15-x64.zip"揭示了我们正在处理的是PHP的一个扩展模块——MCrypt,版本为1.0.3,适用于PHP 7.3,是线程安全(TS)版本,使用Visual C++ 15编译器构建,且是针对64位(x64)操作...
下面我们将深入探讨`goto`在PHP中的使用、加密解密的概念以及如何结合`goto`实现相关功能。 1. `goto` 语句: PHP中的`goto`语句始于PHP 5.3版本,其语法结构为 `goto label;`。`label`是程序员定义的一个标识符,...
本主题将深入探讨“PHP加密解密处理类”的相关知识点,旨在帮助开发者理解和应用这一技术。 PHP作为一种广泛使用的服务器端脚本语言,提供了多种加密和解密方法,以保护敏感数据,如用户密码、API密钥或交易信息。...
Python-mcrypt-1.1可能是该项目的一个版本号,通常版本号的提升意味着修复了已知问题、增加了新功能或提升了性能。在这个特定的版本中,可能包含了对原有功能的优化、bug修复或者新加密算法的添加。如果你打算使用这...
这个"功能强大的php加密解密类"提供了一种高效且安全的方式来处理这些任务。下面,我们将详细探讨加密解密的基本概念、PHP中的加密库以及如何使用自定义类进行加密解密操作。 1. **加密解密基础** 加密是一种将...
"最新款goto解密工具源码,PHP加密解密反编译工具"是一个针对PHP代码的安全解决方案,它允许开发者对源码进行加密,防止未经授权的访问、复制或反编译。下面我们将深入探讨这个主题,了解加密、解密以及反编译的相关...
本主题将深入探讨PHP中基于密钥的加密解密函数,帮助你理解如何使用它们来确保数据的安全性。 1. **加密的基本概念** - 加密是一种将明文数据转化为看似随机的密文的过程,目的是保护信息不被未经授权的人员读取。...
在PHP开发中,数据安全是至关重要的,尤其是在处理敏感信息...总结,PHP提供了丰富的加密解密工具,开发者可以根据需求选择合适的方法。然而,无论采用何种加密手段,都应当遵循最佳实践,确保数据安全并遵守版权法规。
在PHP中,我们可以使用`mcrypt`扩展或内置的`openssl`扩展来实现DES加密解密。`mcrypt`现在已经被废弃,所以我们推荐使用`openssl`。下面是一个PHP的DES加密解密示例: ```php <?php $key = '12345678'; // 8个字符...
总结,PHP加密解密涉及多种方法,从简单的哈希函数到复杂的非对称加密,开发者应根据实际需求选择合适的安全策略。同时,为了保护用户版权,开发者可以采取混淆、数字签名等手段。在实际应用中,要结合多种技术,以...
下面是一个简单的PHP Mcrypt加密和解密的代码示例: ```php <?php $key = "mysecretkey"; // 加密密钥 $plaintext = "Hello, world!"; // 明文数据 // 加密 $iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, ...
例如,`php_mcrypt-1.0.4-7.2-nts-vc15-x64.zip`适合运行在64位Windows系统上,使用PHP 7.2版本且为非线程安全环境的服务器。而`php_mcrypt-1.0.1-7.2-nts-vc15-x64-logs.zip`除了包含扩展外,还包含了日志文件,这...
在PHP中,可以使用mcrypt扩展来实现DES加密解密。首先,你需要创建一个密钥和初始化向量(IV),然后调用`mcrypt_encrypt()`函数进行加密,`mcrypt_decrypt()`函数进行解密。注意,PHP 7.2以后,mcrypt扩展已被弃用...
这个"PHP加密解密实用类"压缩包提供了一系列工具,帮助开发者更方便地进行数据加密与解密操作,确保信息安全。下面我们将深入探讨PHP加密解密的相关知识点。 1. **加密算法基础** - **MD5**:Message-Digest ...
在"java-php-mcrypt-base64-master"这个项目中,开发者可能已经提供了一套完整的示例代码,包括Java和PHP的加密解密函数,以及如何处理Base64编码和解码。这些代码可以帮助我们理解如何在两个平台上实现相同的安全...
### PHP中的AES加密解密实现 #### 背景与目的 在当今互联网时代,数据安全变得尤为重要。尤其是在处理敏感信息如用户个人信息时,确保这些数据的安全性是至关重要的。AES(Advanced Encryption Standard,高级加密...
在易语言与PHP之间实现RC4加密解密的互操作性,需要确保两者的加密实现遵循相同的步骤和密钥管理规则。这意味着密钥必须在两端一致,且加密和解密过程中使用的RC4算法逻辑要相同。这通常涉及以下步骤: 1. **密钥...
总之,PHP提供了多种加密解密字符串的方法,包括使用MCrypt、OpenSSL和PECL扩展。在实际应用中,应根据项目需求选择最合适的加密算法和库,同时确保遵循最佳安全实践,如使用足够长度的密钥、随机生成的初始化向量,...
这些工具可以帮助开发者检查密码强度、快速生成加密哈希或者进行简单的加密解密操作,但实际应用中,应该结合服务器端的加密解密功能来确保数据的安全性。 总结起来,PHP的`mcrypt_encrypt`和`mcrypt_decrypt`函数...