使用javascript sha1是否安全?

时间:2017-02-01 11:25:26

标签: javascript sha1

我需要做SHA1哈希,唯一的选择是使用Javascript(由于我的客户使用第三方产品) 需要SHA1才能将某些信息传递给支付网关。所以需要将以下信息传递给SHA1以转换为哈希(用户名,密码,金额),然后传递给支付网关

我的问题是它安全吗?即,人们只能查看来源并看到我正在哈希的东西?是推荐的吗?还有其他办法吗?

感谢

2 个答案:

答案 0 :(得分:0)

无论使用何种哈希算法,使用浏览器端Javascript,您的用户都始终能够查看页面源并查看您正在哈希的内容。

如果您在服务器端进行散列,则源文本不会显示给浏览器。很难“反转”SHA-1哈希,但不是“不可能” - 有足够的强力,你至少可以找到一个哈希冲突(另一个产生相同哈希的字符串)。

对于大多数用途,SHA-1被认为足够安全。然而,对于主要的,资金充足的反对者而言,它并不被认为是安全的 - 只需几百万美元就可以雇佣足够的云计算资源来相对快速地打破SHA-1哈希,随着计算能力的提高,这将变得越来越便宜。

如果涉及密码,您应该查看BCrypt。

答案 1 :(得分:0)

不,不要这样做!

密码散列应该会使复制数据库的人无法使用登录信息。通过在客户端进行散列,您可以获得数据库中的值,该值需要在请求中发送。因此,攻击者只会禁用散列并使用数据库值作为密码。

密码哈希的快速概述:

每个用户都有一个您的服务知道的密码。他们用它登录。想象一下,您将它们存储在纯文本中。如果有人复制你的数据库,这将是不好的。因此,您使用md5或sha1等算法散列每个密码。哈希不能用于重新创建密码,但如果密码有效,您可以检查密码。问题解决了吗?

不完全。为散列算法创建彩虹表非常简单。这样,您可以快速查找每个哈希的可能输入值。所以你。这意味着每个用户都有一个随机字符串,在散列之前会附加到密码中,从而为每个用户创建一个唯一的散列函数。完美的解决方案?

再次不完全。如果您的数据库被复制,具有足够的计算能力,则可能会被破解。所以你的最后一步是使用迭代。你不要只是追加盐和哈希值,但是你拿出那个结果,再次附加盐并再次哈希。你这样做了几百次。这样,攻击者对暴力攻击变得更加昂贵。这就是 bcrypt 的作用。随着时间的推移,计算能力会增加,因此您应该增加迭代次数。