【问题标题】:Visual Basic 2010 HMAC SHA1Visual Basic 2010 HMAC SHA1
【发布时间】:2011-11-22 19:55:44
【问题描述】:

我得到了一个将字符串转换为 hmac sha1 加密的代码。 但是,我无法让它工作。这是我的代码:

Public Shared Function HashString(ByVal StringToHash As String) As String
    Dim myEncoder As New System.Text.UTF32Encoding
    Dim Key() As Byte = myEncoder.GetBytes("thisismykey")
    Dim Text() As Byte = myEncoder.GetBytes(StringToHash)
    Dim myHMACSHA1 As New System.Security.Cryptography.HMACSHA1(Key)
    Dim HashCode As Byte() = myHMACSHA1.ComputeHash(Text)
    Return Convert.ToBase64String(HashCode)
End Function

当我像这样运行函数时:

TextBox1.Text = HashString("thisismystring")

我在文本框中得到04p075DKS2Suw9jGQKC5Q7mYjvI=。 我应该得到的是c2bc9dd26b76d5b61a40ac788220eef0b26cb2bb

有人知道如何解决这个问题吗?请帮忙:)

【问题讨论】:

    标签: vb.net encryption sha1 hmac


    【解决方案1】:

    我找到了解决方案。 我只是将字节转换为字符串,将其降低并替换 - 什么都没有。 请参阅下面的代码:)

        Public Function HashString(ByVal StringToHash As String, ByVal HachKey As String) As String
        Dim myEncoder As New System.Text.UTF8Encoding
        Dim Key() As Byte = myEncoder.GetBytes(HachKey)
        Dim Text() As Byte = myEncoder.GetBytes(StringToHash)
        Dim myHMACSHA1 As New System.Security.Cryptography.HMACSHA1(Key)
        Dim HashCode As Byte() = myHMACSHA1.ComputeHash(Text)
        Dim hash As String = Replace(BitConverter.ToString(HashCode), "-", "")
        Return hash.ToLower
    End Function
    

    示例用法:

    TextBox1.Text = HashString("thisismystring", "thisismykey")
    

    感谢您的帮助:)

    【讨论】:

      【解决方案2】:

      您的04p075DKS2Suw9jGQKC5Q7mYjvI= 使用 Base64。你的c2bc9dd26b76d5b61a40ac788220eef0b26cb2bb 是十六进制的。您需要将一种格式转换为另一种格式,以便正确比较它们。

      ETA:我检查了,两者不匹配,你的十六进制在 Base64 中给了我wryd0mt21bYaQKx4giDu8LJssrs=。我怀疑问题可能在于使用 UTF32 编码,这很不寻常。 UTF8 或 UTF16 更为常见。先试试 UTF8。

      【讨论】:

        【解决方案3】:

        修正depuis maj EXCEL,

        pour faire du mD5, il faut copier coller le code ci-dessous

        Option Explicit
        Private Const HP_HASHVAL = 2
        Private Const HP_HASHSIZE = 4
        Private Const PROV_RSA_FULL  As Long = 1
        Private Const ALG_CLASS_HASH = 32768
        Private Const ALG_TYPE_ANY = 0
        Private Const ALG_SID_MD2 = 1
        Private Const ALG_SID_MD4 = 2
        Private Const ALG_SID_MD5 = 3
        Private Const ALG_SID_SHA1 = 4
        Private Const CRYPT_NEWKEYSET = &H8
        Private Const CRYPT_VERIFYCONTEXT As Long = &HF0000000
        
        Enum HashAlgorithm
            MD2 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD2
            MD4 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD4
            MD5 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_MD5
            SHA1 = ALG_CLASS_HASH Or ALG_TYPE_ANY Or ALG_SID_SHA1
        End Enum
        
        Private Declare Function CryptAcquireContext Lib "Advapi32" Alias "CryptAcquireContextA" (ByRef phProv As Long, ByVal pszContainer As String, ByVal pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As Long) As Long
        Private Declare Function CryptReleaseContext Lib "Advapi32" (ByVal hProv As Long, ByVal dwFlags As Long) As Long
        Private Declare Function CryptCreateHash Lib "Advapi32" (ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long, ByVal dwFlags As Long, ByRef phHash As Long) As Long
        Private Declare Function CryptDestroyHash Lib "Advapi32" (ByVal hHash As Long) As Long
        Private Declare Function CryptHashData Lib "Advapi32" (ByVal hHash As Long, pbData As Any, ByVal dwDataLen As Long, ByVal dwFlags As Long) As Long
        Private Declare Function CryptGetHashParam Lib "Advapi32" (ByVal hHash As Long, ByVal dwParam As Long, pbData As Any, pdwDataLen As Long, ByVal dwFlags As Long) As Long
        
        Public Function HashString(ByVal Str As String, Optional ByVal Algorithm As HashAlgorithm = MD5) As String
        On Error Resume Next
        Dim hCtx As Long
        Dim hHash As Long
        Dim lRes As Long
        Dim lLen As Long
        Dim lIdx As Long
        Dim abData() As Byte
        lRes = CryptAcquireContext(hCtx, vbNullString, vbNullString, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)
        If lRes <> 0 Then
            lRes = CryptCreateHash(hCtx, Algorithm, 0, 0, hHash)
            If lRes <> 0 Then
                lRes = CryptHashData(hHash, ByVal Str, Len(Str), 0)
                If lRes <> 0 Then
                    lRes = CryptGetHashParam(hHash, HP_HASHSIZE, lLen, 4, 0)
                    If lRes <> 0 Then
                        ReDim abData(0 To lLen - 1)
                        lRes = CryptGetHashParam(hHash, HP_HASHVAL, abData(0), lLen, 0)
                        If lRes <> 0 Then
                            For lIdx = 0 To UBound(abData)
                                HashString = HashString & Right$("0" & Hex$(abData(lIdx)), 2)
                            Next
                        End If
                    End If
                End If
                CryptDestroyHash hHash
            End If
        
        End If
        CryptReleaseContext hCtx, 0
        If lRes = 0 Then
            MsgBox Err.LastDllError
        End If
        End Function
        

        【讨论】:

        • 欢迎来到 Stack Overflow!请使用英语,以便每个人都能理解您。
        • 是的,是的.. 使用英语。你怎么敢。我们美国人太懒惰了,无法使用可用于翻译法语的众多工具之一。
        • 我的法语没问题
        猜你喜欢
        • 1970-01-01
        • 2011-01-28
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 2012-10-12
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多