PHP如何对用户密码进行加密
第二种方法:可以使用MYSQL的 PASSWORD函数进行用户密码的加密.例如:Insert into user(password, ........) values (PASSWORD("$password",.........));
可以在一个PHP文件里面include另外一个PHP文件两次吗
是的,可以在一个PHP文件里面include另外一个PHP文件两次,被include的那个php文件也会执行两次,所以如果在这个文件里面定义的有一个class, 就会报出the class already defined的错误.
mysql的最长数据库名,表名,字段名可以是多长
mysql_pconnect()和mysql_connect()有什么区别
两者的区别主要有两个:
① 在进行数据库连接时,函数会先找同一个host, 用户和密码的persistent(持续的)的'链接,如果能找到,则使用这个链接而不返回一个新的链接.
;
对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇: Mcrypt 和 OpenSSL .
在一些场景下,我们不能保证两套通信系统都使用了相函数簇去实现加密算法,可能 siteA 使用了最新的 OpenSSL 来实现了 AES 加密,但作为第三方服务的 siteB 可能仍在使用 Mcrypt 算法,这就要求我们必须清楚 Mcrypt 同 OpenSSL 之间的差异,以便保证数据加解密的一致性.
协同好以上两点,就可以让 Mcrypt 和 OpenSSL 之间一致性的对数据进行加解密.
AES 是当前最为常用的安全对称加密算法,关于对称加密这里就不在阐述了.
AES 有三种算法,主要是对数据块的大小存在区别:
Mcrypt 的默认填充算法.NUL 即为 Ascii 表的编号为 0 的元素,即空元素,转移字符是 "\0",PHP 的 pack 打包函数在 'a' 模式下就是以 NUL 字符对内容进行填充的,当然,使用 "\0" 手动拼接也是可以的.
默认使用 NUL("\0") 自动对待加密数据进行填充以对齐加密算法数据块长度.
获取 mcrypt 支持的算法,这里我们只关注 AES 算法.
options 参数即为重要,它是兼容 mcrpty 算法的关键:
故可以得出 mcrpty簇 与 openssl簇 的兼容条件如下:
建议将源码复制到本地运行,根据运行结果更好理解.
①二者使用的何种填充算法.
php
$str="admin";?//需要加密的字符串
输出:
第四种
$encrypt=$row['encrypt'];?//?生成的?随机加密字符串?存到数据库中
$flag = true ?返回原始流数据
true ?返回原始流数据
$algo : 算法名称,可通过hash_algos()函数获取所有hash加密的算法
而不同.
true ?返回原始流数据.
具体算法依赖于PHP检查之后支持的算法和$salt的格式和长度,当 然具体结果也和操作系统有关.比较结果采用 hash_equals($crypted,crypt($input,$salt));//且salt值相同
Password_verify($str,$crypted);
函数返回哈希加密后的密码字符串, password_hash() 是crypt()的 一个简单封装
$algo : 算法 PASSWORD_DEFAULT ,PASSWORD_BCRYPT
$options = [
"cost"=10,//指明算法递归的层数,
"salt"="xxadasdsad"//加密盐值,即将被遗 弃,采用系统自动随机生成安全性更高
];
使用的算法、cost 和盐值作为哈希的一部分返回
Password_verify($str,$hashed);
可以进行解码;
string $mode [, string $iv ] )
mcrypt_decrypt ( string $cipher , string $key , string $crypted ,
$ciper:加密算法,mcrypt_list_algorithms()可以获取该函数所有支持的算法
$mode : 加密模式 ,mcrypt_list_modes()获取所有支持的加密模式,ecb,cbc
$key: 加密的秘钥,mcrypt_get_key_size ( string $cipher , string $mode )
获取指定的算法和模式所需的密钥长度.$key要满足这个长度,如果长 度无效会报出警告.
$iv : 加密的初始向量,可通过mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_URANDOM ] ),
Iv的参数size:
通过mcrypt_get_iv_size ( string $cipher , string $mode )获取
Iv 的参数source:
Note: 需要注意的是,如果没有更多可用的用来产生随机数据的信息, 那么 MCRYPT_DEV_RANDOM 可能进入阻塞状态.
$data : 要加密的字符串数据
Zend Guard是目前市面上最成熟的PHP源码加密产品.
经过本人搜集资料,亲身测试后,总结了如何利用Zend Guard对PHP文件进行加密,以及如何利用Zend Loader对加密后的PHP文件进行解密.
Zend Guard的安装及破解
破解需要注意以下几点:
如何使用Zend Guard进行加密?
弹出如下的对话框:
本步骤是选择要加密的文件,可以是单个文件[Add File]或整个文件夹[Add Folder],然后[Next].
(此处,我选择的是对整个文件夹进行加密.即 D:\wamp\www\demo 里的所有文件进行加密.)
如此,就实现了对PHP源码的最简单的加密.
我们可以在产品的输出目录(D:\productDir)里,看到加密后的文件.
可以看出,产品输出目录里的PHP文件已被加密了.
这种最简单的加密方式,我们并没有设置加密的有效期,也没有设置许可证支持(即解密时,是否需要许可证文件),默认是永不过期,不需要解密许可文件.
Zend Loader 解密
上面我们已经对PHP代码进行了最简单的加密(编码),加密后生成的PHP源代码,就不能再被web服务器上的PHP模块解析了.
当我们将加密后的php文件放到web服务器上执行时,会显示如下信息:
Zend Guard Run-time support missing!
One more more files on this web site were encoded by ZendGuard and the required run-time support is not installed orproperly configured.
......
原来,加密后的php代码需要ZendGuardLoader模块才能正常运行.
[Zend.loader],
zend_loader.enable=1
zend_loader.disable_licensing=1
zend_loader.license_path=
注:
zend_loader.enable 表示是否启用zend loader,1表示启用,0表示禁用
zend_loader.disable_licensing 表示是否禁用许可证,1表示禁用,0表示不禁用 (由于上面我加密php文件的时候,没有设置许可证支持,故解密时,禁用许可证)
zend_loader.obfuscation_level_support 表示代码混淆级别
zend_loader.license_path 指定许可证文件的路径
zend_extension 指定zend loader 扩展文件 的路径
配置完成后,重启wampserver,如果您的php的版本是NTS(非线程安全的话),就可以正常执行加密后的PHP文件了.
如何查看安装好的PHP的版本及PHP是否已经成功支持Zend Loader?
通过查看 phpinfo() 函数的输出信息,利用 Ctrl + F 快速查找关键字Thread Safety 和 Zend Guard Loader.
可以看到,Thread Safety 对应的值为disabled,就说明该php的版本是 NTS (非线程安全)的,否则就是TS版本的.
再往下面看,还可以查看 Zend Guard Loader 的配置信息,如下:
到此,整个 Zend Guard 加密和 Zend Guard Loader 解密,就介绍完毕了.
温馨提示: 为了顺利实现PHP代码的zend加密和解密,建议使用PHP官网上主流的PHP的NTS版和Zend官网上对应的Zend Guard加密软件、 Zend Guard Loader解密插件.
相关附件:
Zend