Foxtable(狐表)用户栏目专家坐堂 → [求助]发送移动短信乱码


  共有2225人关注过本帖树形打印复制链接

主题:[求助]发送移动短信乱码

帅哥哟,离线,有人找我吗?
zcgmxf
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
[求助]发送移动短信乱码  发帖心情 Post By:2020/6/12 15:42:00 [显示全部帖子]

老师,现在可以接入移动短信平台,但有个问题,就是output.show(jo(mac))是乱码,不知道怎么解决。谢谢!

U?&????????1?

Dim hc As New HttpClient("http://112.35.1.155:1992/sms/norsubmit")
Dim jo As New JObject
jo("addSerial") = ""
jo("apId") = "dddddd"
jo("content") = "测试短信"
jo("ecName") = "常德市第一中医院"
jo("mobiles") = "13807363451"
jo("secretKey") = "zyyyyy"
jo("sign") = "lPdRggggga"
Dim str As String = jo("ecName").ToString() & jo("apId").ToString() & jo("secretKey").ToString() & jo("mobiles").ToString() & jo("content").ToString() & jo("sign").ToString() & jo("addSerial").ToString() 
Dim md5Hash As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
Dim data As Byte() = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(str))

jo("mac") = Encoding.UTF8.GetString(data)
Dim base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(jo.ToString))
'output.Show(base64 )
output.Show(jo("mac"))
hc.Content = base64 
Dim ret As String = hc.GetData()
MessageBox.Show(ret)
[此贴子已经被作者于2020/6/12 15:56:29编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/6/12 16:01:00 [显示全部帖子]

蓝老师,打不开啊

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/6/12 17:11:00 [显示全部帖子]

蓝老师,按照文档说明,Mac 应该是一个32位的随机字符串,不应是乱码。请帮忙看看哦。谢谢!

API输入参数签名结果,签名算法:将ecNameapIdsecretKeymobilescontentsignaddSerial按照顺序拼接,然后通过md5(32位小写,值的拼接,中间无符号)计算后得出的值


就是加密:Dim str As String = jo("ecName").ToString() & jo("apId").ToString() & jo("secretKey").ToString() & jo("mobiles").ToString() & jo("content").ToString() & jo("sign").ToString() & jo("addSerial").ToString() 


也就是str 如何得到一个32位的字符串?

[此贴子已经被作者于2020/6/12 17:29:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/6/13 7:33:00 [显示全部帖子]

蓝老师,下面这个网址你打开看看。就是加密后生成的mac 要和这个一样
http://tool.chinaz.com/tools/md5.aspx

譬如:常德市第一中医院dddzzzfffgggg13807363451测试短信lPdRneeee  

 32加密后的小写字符串 :ee5f7c6c132a258ea2bcba4d21a9da0f
下面这个是在网上找到的,执行报错,我也看不懂。

MD5加密 生成32位md5

 Function MD5(ByVal strSource As String, ByVal Code As Int16) As String
        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 ATR As String = ""
        Dim i As Integer
        Select Case Code
            Case 16      '选择16位字符的加密结果   
                For i = 4 To 11
                    ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
 
                Next
            Case 32      '选择32位字符的加密结果   
                For i = 0 To 15
                    ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
                Next
            Case Else       'Code错误时,返回全部字符串,即32位字符   
                For i = 0 To 15
                    ATR &= Hex(hashvalue(i)).PadLeft(2, "0").ToLower
                Next
        End Select
        Return ATR
End Function
[此贴子已经被作者于2020/6/13 8:18:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1636 积分:14489 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/6/14 5:54:00 [显示全部帖子]

谢谢蓝老师,昨天网上看了一天的资料,今天早上反复看了代码,把ASCIIEncoding  改成 UTF8Encoding 就行了。再次感谢!

 回到顶部