以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  MD5转换问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=179020)

--  作者:fendouww
--  发布时间:2022/8/3 11:53:00
--  MD5转换问题

算法说明:根据传入的content(报文内容)、charset(编码方式)、keys(SecretKey)三个参数进行加密。编码方式目前支持GBK与UTF-8两种,签名SecretKey为菜鸟为CP生成,签名体为报文内容+签名Key,签名算法为:对签名内容进行md5,后将内容转换成base64编码。
例如:c; charset="utf-8"; keys="key123";
签名结果为:ufYU7rvXhHY3IDyZgyt6SA== 即为正确。


以上是阿里云的一个接口签名算法和参考代码,在fox要如何得到签名结果,请求帮忙,以上面例子计算 ufYU7rvXhHY3IDyZgyt6SA==


--  作者:有点蓝
--  发布时间:2022/8/3 12:11:00
--  
接口文档地址发上来看看
--  作者:fendouww
--  发布时间:2022/8/3 12:45:00
--  
https://www.yuque.com/docs/share/e29591fb-1105-4a3f-a041-b8b1f618263f?#
--  作者:fendouww
--  发布时间:2022/8/3 13:58:00
--  
老师,我用以下代码生成的和在PHP里生成的做了对比,只要PHP的MD5函数不加true就是一致的结果,这应该怎么做呢?
Dim a As String = "hello1234key123"
a = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(a, "MD5")
a = a.ToLower()

Dim b As Byte() = System.Text.Encoding.[Default].GetBytes(a)
Dim base64 = Convert.ToBase64String(b)
output.show(base64)

PHP的代码,不加true的结果就是一致的
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2022/8/3 14:02:00
--  
MD5有几种算法,我试过都不对。找他们官方要.net的实例看看
--  作者:fendouww
--  发布时间:2022/8/3 14:13:00
--  
老师,我找了资料,应该是要把FOX里的MD5的结果变成二进制,结果就可以一致了
https://www.runoob.com/php/func-string-md5.html

--  作者:有点蓝
--  发布时间:2022/8/3 14:21:00
--  
试过不行,可以自己试试

Dim s As String = "content=""hello1234"";charset=""utf-8"";keys=""key123"";"
Dim es As String = Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(s, "MD5")
Output.Show(es)
Dim str2 As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(es.ToLower))
Output.Show( str2)

Using md5Hash As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
    Dim data As Byte() = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(s))
    Dim sBuilder As New StringBuilder()
    Dim i As Integer
    For i = 0 To data.Length - 1
        If data(i) < 16 Then
            sBuilder.Append("0" & data(i).ToString("x2"))
        Else
            sBuilder.Append(data(i).ToString("x2"))
        End If
    Next 
    Dim hash As String = sBuilder.ToString().ToLower
    Output.Show(hash)
    Dim bs() As Byte = Encoding.UTF8.GetBytes(hash)
    Dim str As String = Convert.ToBase64String(bs)
    Output.Show( str)
End Using


Dim md5Hash2 As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
Dim data3 As Byte() = md5Hash2.ComputeHash(Encoding.UTF8.GetBytes(s))
Dim str3 As String = Convert.ToBase64String(data3)

Output.Show( str3)

Output.Show( MD5Encrypt(s))

--  作者:fendouww
--  发布时间:2022/8/3 14:25:00
--  
老师,str3是正确的,只需要把Dim s As String = "hello1234key123"就可以了,非常感谢!
--  作者:fendouww
--  发布时间:2022/8/3 16:57:00
--  
老师,我有个新问题,另一个接口需要把位图进行gzip压缩后再转换base64,请问FOX要怎么压缩?可以压缩吗?
--  作者:有点蓝
--  发布时间:2022/8/3 17:20:00
--  
接口文档?