您认为最安全,最安全的方法是什么?我把这些片段从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;
?>
答案 0 :(得分:5)
如果您将第一个示例更改为:
<?php
$hash = hash('sha256', $salt1.$password.$salt2);
?>
这对99%的应用程序来说足够安全。
唯一的问题是如何生成盐。我建议使用固定盐($ salt2)和为每个用户生成的盐($ salt1),它将沿着密码存储在数据库中。
这样即使有人检索到您的数据库内容,您也可以非常安全地抵御彩虹表攻击。
答案 1 :(得分:0)
更好的选择是使用md5以外的其他内容,请检查here以获取与之相关的问题。
答案 2 :(得分:0)
对此没有标准的好答案。我所知道的是安全性和速度必须平衡。您可以AES加密每个信息,但这是否可行?要回答你的问题MD5(这是单向加密)加上SALT(一个非常随机的字符串)被认为是一个很好的安全标准。它碰巧是最快和最安全的。
如果你试图实现自己的加密,那么它不会像你那样缠绕电线太多次的魔法技巧,但它会因手腕拍打而松开。因此,除非你想要理论化和论证这个想法,否则请选择SALT + MD5。
答案 3 :(得分:0)
<?php
$hash = md5($salt1.$password.$salt2);
?>
这个我认为适合大多数目的,所以我会解释它。有两个盐的原因是因为假设$ salt1对每个用户名都是唯一的,因此它是用户表中的一列(用户注册时生成的随机字符串),$ salt2存储在config.ini文件中某处的文件系统中应用程序已安装,并且对所有用户都相同。现在猜测密码黑客需要$ salt1和$ salt1,他可以通过sql注入访问salt1,但是无法访问salt2在config.ini中被sotred的文件系统,因此需要双重保护。
答案 4 :(得分:-1)
只有5种不同的方法可以做到差不多吗?我认为这里的学习目标是了解腌制密码的重要性。盐的最佳方法是尽可能多地使用盐,盐串包含尽可能多的疯狂字符。