以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]发送移动短信乱码 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=151008) |
-- 作者:zcgmxf -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/6/12 15:59:00 -- http://foxtable.com/bbs/dispbbs.asp?boardid=2&Id=150847&page=1&star=2 |
-- 作者:zcgmxf -- 发布时间:2020/6/12 16:01:00 -- 蓝老师,打不开啊 |
-- 作者:有点蓝 -- 发布时间:2020/6/12 16:11:00 -- 自己发的贴打不开?加密后的数据就是这样的,有什么奇怪的? |
-- 作者:zcgmxf -- 发布时间:2020/6/12 17:11:00 -- 蓝老师,按照文档说明,Mac 应该是一个32位的随机字符串,不应是乱码。请帮忙看看哦。谢谢! API输入参数签名结果,签名算法:将ecName,apId,secretKey,mobiles,content,sign,addSerial按照顺序拼接,然后通过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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/6/12 17:31:00 -- 你理解错了,意思是使用32位的加密算法。 如果不正确,找移动要.net源码。如果没有就换其他短信平台吧
|
-- 作者:zcgmxf -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2020/6/14 5:54:00 -- 谢谢蓝老师,昨天网上看了一天的资料,今天早上反复看了代码,把ASCIIEncoding 改成 UTF8Encoding 就行了。再次感谢! |