php – 安全性:密码加密结果取决于服务器吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 安全性:密码加密结果取决于服务器吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1376字,纯文字阅读大概需要2分钟。
内容图文
![php – 安全性:密码加密结果取决于服务器吗?](/upload/InfoBanner/zyjiaocheng/730/e64fc9e4ff5f478694722381750d8701.jpg)
我在cakephp应用程序中工作,我使用Security :: cipher来加密一些数据.它工作得很好,但我已经将文件和数据库移动到另一台服务器,现在加密的结果是不同的.
我试过一些简单的线条:
$security = new Security;
$code = $security->cipher('1234', Configure::read('Security.cipherSeed'));
当我打印$code时,两个服务器的值都不同.我在两个core.php文件中配置了相同的Security.cipherSeed.
Security :: cipher函数是否使用某些服务器值进行加密?
谢谢.
解决方法:
那么,看看this bug,它似乎确实是一个问题.
深入研究the source code,这条线是它的工作原理:
srand(Configure::read('Security.cipherSeed'));
现在,为什么这样做?因为rand()实现了伪随机算法.因此,对于任何给定的已知种子,理论上可以产生相同系列的随机输出.要查看这是否有效,让我们看一下the PHP source code for rand(),特别是内部的php_rand函数:
PHPAPI long php_rand(TSRMLS_D)
{
long ret;
if (!BG(rand_is_seeded)) {
php_srand(GENERATE_SEED() TSRMLS_CC);
}
我们知道这不是问题,因为我们手动播种(除非我们在服务器上安装了suhosin补丁,否则它将一直重新播种,因此无法工作).
#ifdef ZTS
ret = php_rand_r(&BG(rand_seed));
#else
# if defined(HAVE_RANDOM)
ret = random();
# elif defined(HAVE_LRAND48)
ret = lrand48();
# else
ret = rand();
# endif
#endif
哇,你看到发生了什么事吗?根据服务器规范,可以使用4个不同的随机库之一(rand(),random(),lrand48()或它自己的内部随机函数php_rand_r)!这就是为什么它不能跨服务器安装移植.
编辑:我已经提交了关于这个主题的bug report蛋糕.
内容总结
以上是互联网集市为您收集整理的php – 安全性:密码加密结果取决于服务器吗?全部内容,希望文章能够帮你解决php – 安全性:密码加密结果取决于服务器吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。