vb和vb.net下md5加密的结果不一样

时间:2022-10-28 16:52:24
我以前用vb6从网上搜了md5的源吗 而且用得好好的
后来程序用vb.net 我用网上流行的写法

    Public Function MD5(ByVal strSource As String, ByVal Code As Int16) As String
        '这里用的是ascii编码密码原文,如果要用汉字做密码,可以用UnicodeEncoding,但会与ASP中的MD5函数不兼容
        Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
        Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
        Dim i As Integer
        Select Case Code
            '  md5=System.Security.Cryptography.MD5.Create()
            Case 16  '选择16位字符的加密结果
                For i = 4 To 11
                    MD5 += Hex(hashvalue(i)).ToUpper
                Next
            Case 32  '选择32位字符的加密结果
                For i = 0 To 15
                    MD5 += Hex(hashvalue(i)).ToUpper
                Next
            Case Else   'Code错误时,返回全部字符串,即32位字符
                For i = 0 To hashvalue.Length - 1
                    MD5 += Hex(hashvalue(i)).ToUpper
                Next
        End Select
    End Function

可是发现 同样的字符串  比如 11111111
vb.net算出来的和我用vb的不一样 而我们后台生成的java写的就和我用vb6写的一样
不知道为什么
vb.net加密的结果MD5("11111111",32)=  1BBD886460827015E5D65ED44252251
vb6加密出来的是   1BBD886460827015E5D605ED44252251  而且结果应该是 1BBD886460827015E5D605ED44252251

我找不到答案所在? 这个问题该怎么解决?

5 个解决方案

#1


晕,你这两个根本都是一样的结果啊

#2


VB.NET的你不用设置32看看,你自己数数就知道了,你现在用.NET生成的加密的只有31位!肯定是不对的,不知道你怎么用的,会用出31位的来

#3


Imports System.Security.Cryptography
Imports System.Text
Module 加密模块
    Function MD5(ByVal input As String, ByVal coda As Integer) As String
        Dim md5Hasher As New MD5CryptoServiceProvider
        Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))
        Dim sBuilder As New StringBuilder
        Dim i As Integer
        If coda = 16 Then
            For i = 4 To 11
                sBuilder.Append(data(i).ToString("x2"))
            Next i
        Else '32位
            For i = 0 To 15
                sBuilder.Append(data(i).ToString("x2"))
            Next i
        End If
        Return sBuilder.ToString()
    End Function
End Module

这个是32位的

#4


HAVENT(夜雨流星℡)   first谢谢你的回答
second  我已经写的很明白我是怎么用的,我的md5方法的代码有了,而且我直接这样  MD5("11111111",32) 用的,结果就是31位

#5


谢谢htpower

#1


晕,你这两个根本都是一样的结果啊

#2


VB.NET的你不用设置32看看,你自己数数就知道了,你现在用.NET生成的加密的只有31位!肯定是不对的,不知道你怎么用的,会用出31位的来

#3


Imports System.Security.Cryptography
Imports System.Text
Module 加密模块
    Function MD5(ByVal input As String, ByVal coda As Integer) As String
        Dim md5Hasher As New MD5CryptoServiceProvider
        Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input))
        Dim sBuilder As New StringBuilder
        Dim i As Integer
        If coda = 16 Then
            For i = 4 To 11
                sBuilder.Append(data(i).ToString("x2"))
            Next i
        Else '32位
            For i = 0 To 15
                sBuilder.Append(data(i).ToString("x2"))
            Next i
        End If
        Return sBuilder.ToString()
    End Function
End Module

这个是32位的

#4


HAVENT(夜雨流星℡)   first谢谢你的回答
second  我已经写的很明白我是怎么用的,我的md5方法的代码有了,而且我直接这样  MD5("11111111",32) 用的,结果就是31位

#5


谢谢htpower