求大神帮我把一个17行的VB.net的函数转成VB6.0的,一段ROS3.X密码算法
vb.net
Function EncodePassword(ByVal pass As String, ByVal challange As String) As String
Dim hash_byte(challange.Length / 2 - 1) As Byte
For i = 0 To challange.Length - 2 Step 2
hash_byte(i / 2) = Byte.Parse(challange.Substring(i, 2), Globalization.NumberStyles.HexNumber)
Next
Dim response(pass.Length + hash_byte.Length) As Byte
response(0) = 0
Text.Encoding.ASCII.GetBytes(pass.ToCharArray()).CopyTo(response, 1)
hash_byte.CopyTo(response, 1 + pass.Length)
Dim md5 = New System.Security.Cryptography.MD5CryptoServiceProvider()
Dim hash = md5.ComputeHash(response)
Dim hashStr As New Text.StringBuilder()
For Each h In hash
hashStr.Append(h.ToString("x2"))
Next
Return hashStr.ToString()
End Function
希望那位大神帮我转成vb6.0的,这是一段ROS3.X以上的API密码算法,我只会VB6.0的,自己尝试转过,但都没有成功,那位大大帮帮忙,或者指点下如果您顺手的话就帮我转一下吧。主要是“hash_byte(i / 2) = Byte.Parse(challange.Substring(i, 2), Globalization.NumberStyles.HexNumber)”这段,因为不会vb.net所以具体不知道它是什么个意思。 --------------------编程问答-------------------- 就是将两个十六进制字符转换成 Byte 值。
hash_byte(i / 2) = CByte("&H" & Mid(challange,i+1,2))'VB6 中字符位置按照自然习惯,从1开始--------------------编程问答-------------------- 谢谢Tiger_Zhao的回复
Text.Encoding.ASCII.GetBytes(pass.ToCharArray()).CopyTo(response, 1)
这句里的Text是不是一个text.box?方便整体帮我转一下吗? --------------------编程问答-------------------- 是不是没办法完美转成VB的啊? --------------------编程问答-------------------- 你就算不装 .Net 开发环境,也至少应该去查查 MSDN 帮助吧。
http://msdn.microsoft.com/zh-cn/library/system.text.encoding.ascii.aspx
.Net 提供了许多现成的方法,转换时需要多步实现。
还好这句比较简单
'对应 GetBytes()--------------------编程问答-------------------- 谢谢Tiger_Zhao不厌其烦的指点
Dim aTemp() as byte
aTemp = StrConv(pass,vbFromUnicode)
'对应 CopyTo()。密码的数据量很小,就没必要用 CopyMemory 了。
Dim i as long
for i=0 to ubound(aTemp)
response(i+1) = aTemp(i)
next
问题是VB中怎么对 BYTE进行MD5加密? --------------------编程问答-------------------- http://www.mvps.org/emorcillo/en/code/vb6/hash.shtml
参考一下这个,更改一下 CryptHashData 的调用即可。 --------------------编程问答-------------------- 唉,得了的结果和.net不一样!
补充:VB , 网络编程