asp-classic - 使用 CAPICOM 进行哈希处理和加盐?使用 asp-classic 的 SHA 512

标签 asp-classic hash salt sha512

我想知道这种方法是否可以安全地用于登录,因为这是我发现的唯一一种易于理解的方法,并且它采用 asp-classic 格式,以便我一个菜鸟可以理解并添加到网站中我有。

谢谢

    <%
    Dim sDigest,sPassword,sSalt
    sDigest=SHA256(sRndStr)


    sPassword = Request.Form("pass")
    sSalt = Request.Form("username") & "SomeThingThatisStatic1234567890"

    With CreateObject("CAPICOM.HashedData") 
      .Algorithm = 6 '<--- This will use SHA-512
      'CAPICOM_HASH_ALGORITHM_SHA1      = 0 
      'CAPICOM_HASH_ALGORITHM_MD2       = 1 
      'CAPICOM_HASH_ALGORITHM_MD4       = 2 
      'CAPICOM_HASH_ALGORITHM_MD5       = 3 
      'CAPICOM_HASH_ALGORITHM_SHA_256   = 4 - Not supported on Windows XP or 2000 
      'CAPICOM_HASH_ALGORITHM_SHA_384   = 5 - Not supported on Windows XP or 2000 
      'CAPICOM_HASH_ALGORITHM_SHA_512   = 6 - Not supported on Windows XP or 2000 

      .Hash sPassword & sSalt 

'Response.Write "Here is your hash: " & .Value 
'---> here i would then check this hash with the hash in the database
'---> and if it's the same let the user login if not go to error: wrong info.
    End With 
%>

最佳答案

除非我错过了一些相当重要的东西,否则它看起来并不是特别安全。特别是,您似乎正在通过连接发送盐/密码的哈希值,并在服务器上进行验证。如果是这样,它就容易受到重放攻击——即,有人进入对话,查看用户响应登录的内容,然后通过发送相同的响应来使用这些凭据登录。对密码进行散列/加盐处理可以防止他们知道用户的原始密码,但他们并不关心——知道散列,这就是服务器检查让他们登录的全部内容。

为了避免这种情况,您通常需要使用挑战/响应设置:

  1. 用户发送一些内容来表示他们想要登录
  2. 服务器生成一个随机数并发送给用户
  3. 客户端使用哈希/加盐密码作为 key 来加密随机数,并将结果连同用户名一起发送回服务器
  4. 服务器根据用户的散列/加盐密码进行相同的加密
  5. 服务器比较两个加密数字

每次用户尝试登录时,服务器都会生成一个新的/不同的随机数。即使有人拥有先前登录的数据包,他们也不会让 spy 再次登录。

关于asp-classic - 使用 CAPICOM 进行哈希处理和加盐?使用 asp-classic 的 SHA 512,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058933/

相关文章:

xml - 如何使用 asp 设置 http 超时?

ruby-on-rails - ruby on rails 中的 object.to_yaml (YAML) 时可以删除 "!ruby/hash:ActionController::Parameters"吗?

C#:在对用户进行身份验证时,将密码哈希与用户输入的不同大小进行比较

php - 用 PHP 和 MySQL 给我的哈希加盐

javascript - ASP 中的正则表达式巫术

类似于 ASP isDate() 的 PHP 日期验证用于用户提交的日期、时间或日期/时间对

mysql - 如何添加或加上时间到 NOW()

c - 尝试将哈希函数转换为 C

ruby - 在 ruby​​ 中从 JSON 中提取信息而不使用任何 gem