用CAPICOM散列盐和盐? SHA 512使用asp-classic

时间:2012-08-21 16:09:00

标签: asp-classic hash salt sha512

我想知道这个方法是否可以安全地用于登录,因为这是我发现的唯一一个易于理解的方法,并且它是asp经典的,所以我一个菜鸟可以理解并添加到网站我有。

由于

    <%
    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 个答案:

答案 0 :(得分:3)

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

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

  1. 用户发送的内容表明他们想要登录
  2. 服务器生成随机数并将其发送给用户
  3. 客户端使用散列/加密密码作为密钥加密随机数,并将结果连同用户名一起发送回服务器
  4. 服务器使用该用户的散列/加密密码
  5. 进行相同的加密
  6. 服务器比较两个加密的数字
  7. 每次用户尝试登录时,服务器都会生成一个新的/不同的随机数。即使有人拥有早期登录的数据包,他们也不会让间谍再次登录。