Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php md5的替代品,也可在javascript中获得_Php_Javascript_Encryption_Hash_Md5 - Fatal编程技术网

Php md5的替代品,也可在javascript中获得

Php md5的替代品,也可在javascript中获得,php,javascript,encryption,hash,md5,Php,Javascript,Encryption,Hash,Md5,如php.net所述: 不建议使用此功能保护密码,因为 这种哈希算法的快速性 自从我开始使用PHP编程以来,我就使用了md5函数,但是经过研究,很明显不鼓励使用md5,应该使用另一种方法 我知道一个可能的替代方案,sha1还有其他的吗? 这些其他功能的好处是什么,以及sha1(不包括更高的安全性)? 最重要的是,sha1散列或任何其他散列算法可以在javascript中复制吗? 我有一个javascript中的md5插件,它是我的一些安全应用程序的关键。因此,拥有一个包含javascript插件

如php.net所述:

不建议使用此功能保护密码,因为 这种哈希算法的快速性

自从我开始使用PHP编程以来,我就使用了
md5
函数,但是经过研究,很明显不鼓励使用
md5
,应该使用另一种方法

我知道一个可能的替代方案,
sha1
还有其他的吗?

这些其他功能的好处是什么,以及
sha1
(不包括更高的安全性)?

最重要的是,
sha1
散列或任何其他散列算法可以在javascript中复制吗?


我有一个javascript中的
md5
插件,它是我的一些安全应用程序的关键。因此,拥有一个包含javascript插件的哈希算法是绝对必要的。

是的,还有许多其他哈希算法,比
SHA1
强得多。选中
SHA512
,例如:它有512位,而
MD5
则有128位。 无论如何,如果您希望获得真正的安全性,则应采用以下方法之一:

1) “固定盐”:您使用的不是
md5($pass)
,而是:

$salt="NaCl";
$hash=md5($salt);
2) “随机盐”:代替md5($pass)”,您可以生成一个范围很大的随机盐(使用函数
rand($minValue,$maxValue)
),比如
rand(0,pow(10100))
并使用
md5($pass,$salt)
别忘了存储散列和盐!

3) 加密:您可以使用固定密钥或随机密钥(参见前面的方法),并使用它来加密密码。我真的建议使用河豚算法。 从PHP.net上的

<?php
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = "This is a very secret key";
    $text = "Meet me at 11 o'clock behind the monument.";
    echo strlen($text) . "\n";

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
    echo strlen($crypttext) . "\n";
?>

SHA1和MD5有着几乎相同的弱点:它们的抗碰撞能力被破坏。所以当MD5是错误的,SHA1也是错误的。他们的产量也有点短。如果需要抗冲突,我建议至少使用256位哈希。很少需要超过256位

对于普通散列应用程序,SHA-256(SHA-2系列的一部分)是一个不错的选择。虽然它的性能不是很好,但到目前为止还没有人破坏它的抗碰撞能力。您也可以使用SHA-3-256,但是库支持还没有那么好

对于密码散列,您需要一个专门的构造,例如scrypt、bcrypt或PBKDF2。使用唯一的salt和足够的迭代计数。不要使用普通散列,它们太快了

对于MAC(消息认证),使用专门的结构,例如HMAC-SHA-256,而不是普通的SHA-256


即将发布的版本将包含这些操作的大部分功能

在部署之前,您可以使用提供PBKDF2和SHA-256的



但我对你们的建筑有点怀疑。用javascript散列密码很少是正确的选择。标准过程是使用SSL/TLS并通过它发送明文密码。除非使用TLS,否则浏览器中的javascript无法实现安全性。

关于javascript中的SHA-1,请查看项目并查看
sha1
函数。@MaxArt感谢您的回复,将查看:-)查看javascript哈希函数。对于“x可以在y中完成吗?”的回答总是“是”,只要x是可计算的,y是图灵完备的。最好是问“x在y中是否可用作库函数?”我更感兴趣的是,在Javascript中应用哈希作为“安全密钥”。这难道不能用一个只保护服务器的方案来代替吗?另外,解释一下为什么512比sha512好,比md5和sha1好:sha512是512位长,而md5是128位,sha1是-afaik-256位。因此,与sha512相比,发现md5冲突(两个具有相同哈希的字符串)的可能性要大得多。感谢您的回答,尽管我非常感谢您的帮助,但我已经意识到了这一点,以及为什么sha512更安全等等。。。我不是PHP安全的新手。我的问题很简单,哪个是最安全的,它是否作为javascript插件存在?你已经在一定程度上回答了我的问题,所以我会给你+1,但我真正想要的是一个明确的指示,说明使用哪种哈希算法(你已经这样做了),以及一个指向包含该算法的开源javascript插件的链接。如果你能提供,那么我会接受你的回答。相当多的缺陷。1) ECB模式2)将字符串直接放入IV.3)MD5中,用于密码散列4)创建坏盐。5) 加密易受填充预言的攻击(作为一个小问题,为什么没有AES?@giuliomusarello您需要修改您的答案,而不是添加到注释中请参阅我对@giuliomusarello答案的注释。您已经回答了我的问题,回答的程度为so+1,但我认为这实际上取决于我是否能找到一个javascript插件来复制PHP函数。加密API是javascript吗?从一个页面发送密码到另一个页面,无论是通过ajax还是表单提交,都将始终公开发送的数据,除非是通过HTTPS。在客户端对密码进行散列,只会给应用程序增加另一个级别的安全性(尽管很小,而且可以破解)。这就是为什么:-)@BenCarey对密码客户端进行散列传输在安全性方面没有任何作用。您刚刚将密码的散列设置为密码。这样想:你和我同意用代号“土豆”来识别对方。有一天,你意识到有人可能会在你确认身份时听你说话,所以你对我说:“好吧,从现在起,我会把密码字散列出来,告诉你,这样我们才能安全!”但是既然“土豆”总是散列到“123456789”,那么,有什么能阻止无意中听到“123456789”的人,而不知道“真正的”关键字是“土豆”重复它呢?@NikB。不过,我同意,这增加了一个安全级别,因为他们仍然不知道键入了什么
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha512.js"></s‌​cript>
<script> var hash = CryptoJS.SHA512("Message"); </script>