Skip to content

Tools - 密码工具类

cPassword - 密码哈希工具

概述

提供密码的哈希生成和验证功能,支持 MD5、SHA1、SHA256 等算法,支持自定义盐值。

依赖

  • cCryptoHash (src/Crypt/Hash)

属性

属性类型说明
AlgorithmCryptoHashAlgorithm哈希算法(默认 MD5)
SaltString盐值(默认空)
EncodingCryptoStringEncoding字符串编码(默认 UTF8)
LastErrorString最后一次错误信息(只读)

枚举值

CryptoHashAlgorithm

vb
HASH_ALG_MD5 = 0
HASH_ALG_SHA1 = 1
HASH_ALG_SHA256 = 2

方法

Create

创建密码哈希。

vb
Public Function Create( _
    ByVal Password As String, _
    Optional ByRef Salt As Variant _
) As String

参数:

参数名类型说明
PasswordString明文密码
SaltVariant可选,盐值(不传则使用属性中的 Salt)

返回值:

返回十六进制格式的哈希字符串。

示例:

vb
Dim Pwd As New cPassword

' 使用默认 MD5
Dim Hash1 As String
Hash1 = Pwd.Create("myPassword")
Debug.Print Hash1  ' 输出: 34819d7beeabb9260a5c854bc85b3e44

' 使用 SHA256
Pwd.Algorithm = HASH_ALG_SHA256
Dim Hash2 As String
Hash2 = Pwd.Create("myPassword")
Debug.Print Hash2

' 使用随机盐值
Dim Salt As String
Salt = VBMAN.CryptoRandom.GetString(16)  ' 生成16位随机盐
Pwd.Salt = Salt
Dim Hash3 As String
Hash3 = Pwd.Create("myPassword")

Verify

验证密码是否匹配。

vb
Public Function Verify( _
    ByVal Password As String, _
    ByVal Hash As String, _
    Optional ByRef Salt As Variant _
) As Boolean

参数:

参数名类型说明
PasswordString明文密码
HashString存储的哈希值
SaltVariant可选,盐值

返回值:

  • True - 密码匹配
  • False - 密码不匹配

示例:

vb
Dim Pwd As New cPassword
Pwd.Salt = "mysalt"

' 创建哈希
Dim StoredHash As String
StoredHash = Pwd.Create("myPassword")

' 验证密码
If Pwd.Verify("myPassword", StoredHash) Then
    Debug.Print "密码正确"
Else
    Debug.Print "密码错误"
End If

完整示例

vb
Private Sub TestPassword()
    Dim Pwd As New cPassword
    
    ' 配置
    Pwd.Algorithm = HASH_ALG_SHA256
    Pwd.Salt = "AppSpecificSalt"
    Pwd.Encoding = ENCODING_UTF8
    
    ' 用户注册时存储哈希
    Dim UserHash As String
    UserHash = Pwd.Create(txtPassword.Text)
    SaveToDatabase txtUserName.Text, UserHash
    
    ' 用户登录时验证
    Dim StoredHash As String
    StoredHash = GetHashFromDatabase(txtUserName.Text)
    
    If Pwd.Verify(txtPassword.Text, StoredHash) Then
        MsgBox "登录成功"
    Else
        MsgBox "密码错误"
    End If
End Sub

安全建议

  1. 使用强哈希算法 - 优先使用 SHA256
  2. 添加随机盐值 - 防止彩虹表攻击
  3. 盐值唯一性 - 每个用户应使用不同的盐值
  4. 盐值存储 - 盐值应与哈希一起存储

VB6及其LOGO版权为微软公司所有