-1

我想保护我的用户密码。我想知道如果我多次加密密码,它会保护密码。 例如:它会在php中保护2次加密密码吗?

<?php 
$pass = "hello"; 
$en = md5($pass, TRUE); //result will be ][email protected]*�K*v�q��Œ 
$en1 = md5($en, TRUE); //result will be b�� 8� ��C�J 
$en2 = md5($en1, TRUE); //result will be X���dR��6�@c�� 
?> 
+1

md5自1996年以来中断。无论您使用了多少次,人们都可以解密您返回的任何内容。所以不,它不会让它安全两倍,它仍然会非常脆弱。 –

+0

我建议使用SHA。不是SHA-1,因为它已经被破解了。更高的东西。 –

+0

我认为你应该与[Bcrypt](http://thehackernews.com/2014/04/securing-passwords-with-bcrypt-hashing.html)一起去。检查[this](https://stackoverflow.com/q/1561174/8101556)有趣的帖子。 –

回答

-1

md5()不安全,做3次或100次都不能解决问题。

最好在用户传递md5()之前放一些“salt”。

例如:

$pass = "hello"; 
$PassWithSalt = $pass.uniqid()."ziufh!fsfdnskjv"; 
$cryptedPass = md5($PassWithSalt); 

只有你会知道盐解密您的通行证。

编辑:正如说的twicejr,最好不要使用md5()。 你可以只散列通票与 散列()或password_hash():

https://secure.php.net/manual/fr/function.password-hash.php

动态盐是加了。 (从其他列等获取用户信息...)

+0

盐应该是每个密码的随机唯一值,所以最好不要将其形成现有的用户数据,当然也不要使用恒定的盐。 – martinstoeckli

+0

使用用户数据,然后随机化字母顺序例如一个函数是最简单的方法有一个动态盐,我认为。 – Jilu

+0

最佳做法是使用密码哈希函数,如BCrypt,SCrypt,PBKDF2或Argon2。它们中的大多数从OS的随机源生成一个随机唯一的盐,并将盐包含在生成的哈希字符串中。该盐可以从那里提取以进行验证。从已知的用户数据中衍生出一个盐并不是什么大问题,但可以为“admin”等特定帐户生成彩虹表。即使是散列的MD5也不应该被使用,因为它可能被强制超过[10 Giga MD5每秒](http://thepasswordproject.com/oclhashcat_benchmarking)。 – martinstoeckli

-1

如果哈希算法本身尚未被破解,则重复哈希提供更高的安全性。 Md5不用于'加密'。此外,md5也会受到影响。

重复算法只是增加了更多的时间,这很好。但是在md5的情况下,不应该期望安全性,因此它是毫无意义的。

此外,密码永远不应加密。只是单向散列。

散列密码的一个好方法是将sha512与多个“盐”结合使用。 添加通用盐和“基于内容”的盐,使其更加安全。 (您可以将用户行的部分电子邮件地址或类似内容注入到主字符串中,以便在预定义的位置进行散列处理,甚至可以根据其他因素让位置)。

事情是,sha512还没有被打破,你根本不应该使用md5。

$safe_hash = hash('sha512', 'SALTY_BALLS' . $password . $user_salt_based_on_something_specific_for_this_row);

+0

哦,并改变每个网站的通用盐:) 额外的好处是你可以使用单个配置文件更改无效所有用户密码! – twicejr

+0

推荐一个不同的散列,因为它“尚未破解”并不真正有帮助。它有一天会被打破,你会马上回到你开始的地方。正确实施API(使用'password_needs_rehash'),你不需要再次触摸你的代码。 – iainn

+3

不,在密码散列的情况下,sha512并不比md5更好。这里重要的是前映像电阻和速度。无关紧要的是碰撞阻力。原因如下:https://www.troyhunt.com/our-password-hashing-has-no-clothes/ – TheGreatContini

3

目前最安全的方法是password_hash()和password_verify();忘记md5()和其他人只是使用这两个,它们在手册中可用。

<?php 
$pass = "hello"; 

$hash = password_hash($pass,PASSWORD_DEFAULT); 
?>