您认为哪种方法最安全?我从 php.net 上取下了这些片段。我只是想知道,因为人们发布了自己的内容,而我只是无法理解为什么有些人是这样的......有人可以帮助我并告诉我更多关于这些的信息吗?哪个最安全,为什么?
1.
<?php
$hash = md5($salt1.$password.$salt2);
?>
2.
<?php
function eliteEncrypt($string) {
// Create a salt
$salt = md5($string."%*4!#$;\.k~'(_@");
// Hash the string
$string = md5("$salt$string$salt");
return $string;
}
?>
3.
<?php
define ('SALT_ONE', 'some_random_123_collection_&$^%_of_stuff');
define ('SALT_TWO', 'another_random_%*!_collection_ANbu_of_stuff');
$password = 'dragon';
function generate_encrypted_password($str) {
$new_pword = '';
if( defined('SALT_ONE') ):
$new_pword .= md5(SALT_ONE);
endif;
$new_pword .= md5($str);
if( defined('SALT_TWO') ):
$new_pword .= md5(SALT_TWO);
endif;
return substr($new_pword, strlen($str), 40);
}
echo generate_encrypted_password($password);
?>
4.
<?
function enchsetenev($toencode,$times)
{
$salt = 's+(_a*';
for($zo=0;$zo<$times;$zo=$zo+1)
{
$toencode = hash('sha512',salt.$toencode);
$toencode = md5($toencode.$salt);
}
return $toencode;
}
?>
5.
<?php
$hash = $password . $salt;
for ( $i = 0; $i < 10000; $i++ ) {
$hash = md5( $hash );
}
echo $hash;
?>
- 这是我们想要的一个基本示例,在密码中添加盐
- 这是相同的示例,但具有盐生成部分。
- 一种不同的加盐方法,但仍然相当等效
- 这个过于复杂的示例绝对没有意义,多次使用两种不同的哈希方法进行哈希绝对不会提高安全性。
- 正如已经说过的,执行 10000 次哈希是绝对没有意义的。
如果将第一个示例更改为:
<?php
$hash = hash('sha256', $salt1.$password.$salt2);
?>
这对于 99% 的应用程序来说足够安全。
唯一的问题是如何产生盐。我建议使用固定盐($salt2)和为每个用户生成的盐($salt1),该盐与密码一起存储在数据库中。
这样,即使有人检索了您数据库的内容,您也可以非常安全地抵御彩虹表攻击。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)