后来程序用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位的
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位
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位的
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位
second 我已经写的很明白我是怎么用的,我的md5方法的代码有了,而且我直接这样 MD5("11111111",32) 用的,结果就是31位
#5
谢谢htpower