PHP中的密码安全性

你会称哪种方法最安全最安全? 我将这些片段从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),这个盐是按照密码存储在数据库中的。

    这样,即使有人检索到数据库的内容,您也可以非常安全地抵御彩虹表攻击。


    更好的选择是使用md5以外的东西,请在这里查看以前回答的与此相关的问题。


    对此没有标准的好答案。 我所知道的是安全性和速度必须平衡。 你可以AES加密每一个信息,但这是可行的? 要回答你的问题,MD5(这是一种加密方式)加上SALT(一个非常随机的字符串)被认为是一个很好的安全标准。 它恰好是最快和最安全的。

    如果你试图实现你自己的加密,那么它会是什么样的魔术,你缠绕导线的次数太多了,然而它却是用手掌拍打的。 所以除非你想对这个想法进行理论和论证,否则请去SALT + MD5。

    链接地址: http://www.djcxy.com/p/51411.html

    上一篇: password security in PHP

    下一篇: How to specify whether to take ownership of the marshalled string or not?