我需要做SHA1哈希,唯一的选择是使用Javascript(由于我的客户使用第三方产品) 需要SHA1才能将某些信息传递给支付网关。所以需要将以下信息传递给SHA1以转换为哈希(用户名,密码,金额),然后传递给支付网关
我的问题是它安全吗?即,人们只能查看来源并看到我正在哈希的东西?是推荐的吗?还有其他办法吗?
感谢
答案 0 :(得分:0)
无论使用何种哈希算法,使用浏览器端Javascript,您的用户都始终能够查看页面源并查看您正在哈希的内容。
如果您在服务器端进行散列,则源文本不会显示给浏览器。很难“反转”SHA-1哈希,但不是“不可能” - 有足够的强力,你至少可以找到一个哈希冲突(另一个产生相同哈希的字符串)。
对于大多数用途,SHA-1被认为足够安全。然而,对于主要的,资金充足的反对者而言,它并不被认为是安全的 - 只需几百万美元就可以雇佣足够的云计算资源来相对快速地打破SHA-1哈希,随着计算能力的提高,这将变得越来越便宜。
如果涉及密码,您应该查看BCrypt。
答案 1 :(得分:0)
不,不要这样做!
密码散列应该会使复制数据库的人无法使用登录信息。通过在客户端进行散列,您可以获得数据库中的值,该值需要在请求中发送。因此,攻击者只会禁用散列并使用数据库值作为密码。
密码哈希的快速概述:
每个用户都有一个您的服务知道的密码。他们用它登录。想象一下,您将它们存储在纯文本中。如果有人复制你的数据库,这将是不好的。因此,您使用md5或sha1等算法散列每个密码。哈希不能用于重新创建密码,但如果密码有效,您可以检查密码。问题解决了吗?
不完全。为散列算法创建彩虹表非常简单。这样,您可以快速查找每个哈希的可能输入值。所以你盐。这意味着每个用户都有一个随机字符串,在散列之前会附加到密码中,从而为每个用户创建一个唯一的散列函数。完美的解决方案?
再次不完全。如果您的数据库被复制,具有足够的计算能力,则可能会被破解。所以你的最后一步是使用迭代。你不要只是追加盐和哈希值,但是你拿出那个结果,再次附加盐并再次哈希。你这样做了几百次。这样,攻击者对暴力攻击变得更加昂贵。这就是 bcrypt 的作用。随着时间的推移,计算能力会增加,因此您应该增加迭代次数。