gpt4 book ai didi

vb.net - VB.NET 中的 MD5 哈希

转载 作者:行者123 更新时间:2023-12-02 05:42:03 27 4
gpt4 key购买 nike

所以,我在这里遇到了一些问题,我有一个数据库,一个登录和一个注册,所有这些都在不同的类中,现在我需要对数据库中的密码进行哈希处理并在登录时再次将其读出,但是我不知道如何处理这个问题,我已经搜索了很多,但找不到任何有用的东西。

这是我的登录类

Imports System.Data

Imports System.Data.SqlClient

Imports System.Data.SqlServerCe

Public Class Login

Inherits System.Web.UI.Page


Private Sub LSend_Click(sender As Object, e As System.EventArgs) Handles LSend.Click

If Bibliothek.EntryExists(LNAME.Text, "Username") = False Then
LNAMELBL.Text = "Name oder Passwort Falsch."
Exit Sub
End If

If Bibliothek.EntryExists(LPW.Text, "Passwort") = False Then
LNAMELBL.Text = "Name oder Passwort Falsch."
Exit Sub
End If
Dim UserN As String = LNAME.Text
Session("Admin") = Bibliothek.GetValueBool(UserN, "IsAdmin")
Session("USERNA") = Bibliothek.GetValueBool(UserN, "Username")

Response.Redirect("/TSL/Home.aspx")
End Sub
Private Sub REG_Click(sender As Object, e As System.EventArgs) Handles REG.Click
Response.Redirect("/TSL/Registrierung.aspx")
End Sub

End Class

最佳答案

值得注意的是,MD5 不再被认为是对您希望保护的数据进行哈希处理的好方法。有关漏洞的讨论,请参阅维基百科。

See this answer使用 SHA 进行散列。

<小时/>

对于密码,您可以将用户密码的哈希保存到数据库中。因为它是单向的(您无法轻松地从哈希中获取原始值),这会阻止管理员或客户服务代表等人查看数据库中的实际密码。

Imports System.Security.Cryptography
Imports System.Text

Shared Function GetHash(theInput As String) As String

Using hasher As MD5 = MD5.Create() ' create hash object

' Convert to byte array and get hash
Dim dbytes As Byte() =
hasher.ComputeHash(Encoding.UTF8.GetBytes(theInput))

' sb to create string from bytes
Dim sBuilder As New StringBuilder()

' convert byte data to hex string
For n As Integer = 0 To dbytes.Length - 1
sBuilder.Append(dbytes(n).ToString("X2"))
Next n

Return sBuilder.ToString()
End Using

End Function

根据您想要保存的方式,您可以使用 Convert.ToBase64String(),而不是使用 StringBuilder 创建十六进制字符串:

Return Convert.ToBase64String(dbytes)
' MyWeakPassword hashed:
' to hex: DB28F1BE20A407398171295DD0D191E2
' to Base64: 2yjxviCkBzmBcSld0NGR4g==

哈希应该用salt来完成。这是添加到哈希中的数据,使结果更难以预测(有常见密码的哈希结果的字典,例如“密码”;盐会改变结果):

Shared Function GetHash(theInput As String, theSalt As String) As String
...
hasher.ComputeHash(Encoding.UTF8.GetBytes(theInput & theSalt))

盐应该使用加密随机数生成器创建,如 SHA Version 中所示。 。将盐转换为文本(十六进制或 Base64),然后与 PW 结合以获得 PW 哈希值。

<小时/>

要检查/比较用户的条目,只需对输入进行散列并将其与数据库中存储的散列进行比较,使用相同的 Salt(这意味着需要保存 Salt):

 Shared Function CheckHash(hashedStr As String, newInput As String) As Boolean
' get the hash value of user input:
Dim newHash As String = GetHash(newInput & dbSalt)

' return comparison
Return String.Compare(newHash, hashedStr, InvariantCultureIgnoreCase)
End Function

正如所写,GetHash 函数旨在从 CryptoTools 类之类的东西中使用。由于它是共享/静态的,因此不需要实例化该类:

  thisHash = CryptoTools.GetHash(strToHash) 

注意:散列区分大小写,因此 foobar 将产生与 FooBarFOOBAR 不同的散列。要创建不区分大小写的系统,请在计算要保存的 MD5 哈希值之前将原始字符串(例如密码)转换为小写,对他们稍后输入的值:

' ToLowerInvariant allows for foreign char sets
Dim str As String = PWTextBox.Text.ToLowerInvariant

If CheckHash(dbHashedValue, str) Then
' okie dokie
Else
' failed
End If

关于vb.net - VB.NET 中的 MD5 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23513831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com