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


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

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

帅哥哟,离线,有人找我吗?
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编辑过]

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/12 15:59:00 [只看该作者]

http://foxtable.com/bbs/dispbbs.asp?boardid=2&Id=150847&page=1&star=2

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


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

蓝老师,打不开啊

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/12 16:11:00 [只看该作者]

自己发的贴打不开?加密后的数据就是这样的,有什么奇怪的?

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/12 17:31:00 [只看该作者]

你理解错了,意思是使用32位的加密算法。

如果不正确,找移动要.net源码。如果没有就换其他短信平台吧

 回到顶部
帅哥哟,离线,有人找我吗?
zcgmxf
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:超级版主 帖子:107783 积分:548260 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/13 9:31:00 [只看该作者]

把上面的代码最前面加上public,放到全局代码
如:
public Function MD5(ByVal strSource As String, ByVal Code As Int16) As String
        Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
……

然后命令窗口测试:
Dim s As String = "常德市第一中医院dddzzzfffgggg13807363451测试短信lPdRneeee"
Output.Show(md5(s,32))

如果结果也不是预期的,说明算法不一样。MD5有多种算法,如果官方不给实例,就自己在找找其他算法吧,或者就不要折腾了

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


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

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

 回到顶部