以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  签名算法  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=164309)

--  作者:lshshlxsh
--  发布时间:2021/5/5 20:49:00
--  签名算法
POSTsms.tencentcloudapi.com/?Action=SendSms&Language=zh-CN&Nonce=4306&PhoneNumberSet.0= 8615968015166&Region=&SecretId=&Sign=基伟休闲&SmsSdkAppid=1400517359&TemplateID=947545&TemplateParamSet.0=123321&Timestamp=1620261056&Version=2019-07-11


请问老师 以上内容 使用HMAC-SHA1算法,将上一步中获得的签名原文字符串进行加密,并对加密后的签名串使用Base64编码,得到最终的签名串(下面红色部分)  ,用foxtable 该怎么写?
UxiWCuK5ydqpsLoymyrpiYVEEU4=
[此贴子已经被作者于2021/5/6 8:57:43编辑过]

--  作者:有点蓝
--  发布时间:2021/5/6 8:43:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=157480
--  作者:lshshlxsh
--  发布时间:2021/5/6 9:01:00
--  
谢谢老师,根据连接算出啦的 是 图1   我要的是图2 的结果



图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看



图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看



[此贴子已经被作者于2021/5/6 9:02:20编辑过]

--  作者:有点蓝
--  发布时间:2021/5/6 9:15:00
--  
key的值不对吧,这种加密必须要有一个key,不能是空值
--  作者:有点蓝
--  发布时间:2021/5/6 9:22:00
--  
网站使用的是utf8编码:Encoding.utf8.GetBytes,不是Encoding.ASCII.GetBytes,改改即可
--  作者:lshshlxsh
--  发布时间:2021/5/6 9:22:00
--  
我在 https://1024tools.com/hmac  网页上没填写秘钥  算出来的就是我要的结果  
--  作者:bobolan521
--  发布时间:2021/5/6 9:27:00
--  
Dim text1 As String = "POSTsms.tencentcloudapi.com/?Action=SendSms&Language=zh-CN&Nonce=4306&PhoneNumberSet.0= 8615968015166&Region=&SecretId=&Sign=基伟休闲&SmsSdkAppid=1400517359&TemplateID=947545&TemplateParamSet.0=123321&Timestamp=1620261056&Version=2019-07-11"
Dim key1 = ""
Dim byteData = Encoding.utf8.GetBytes(text1)
Dim byteKey = Encoding.utf8.GetBytes(key1)
Dim hmac = new System.Security.Cryptography.HMACSHA1(byteKey)
Dim result = hmac.ComputeHash(byteData)
Dim s = Convert.ToBase64String(result )
output.show(s)


--  作者:lshshlxsh
--  发布时间:2021/5/6 11:18:00
--  


谢谢老师 

图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看


下面代码执行后一直报错  麻烦老师帮忙看一下



Dim st As New Date(1970,1,1,8,0,0)
Dim Timestamp As Integer = CInt((Date.Now - st).TotalSeconds()) \'时间戳
Dim Nonce As Integer = Rand.Next(2000,3000) \'生成200到300之间的随机整数
Dim Signature  As String


Dim haoma As String ="PhoneNumberSet.0= 8615869553734"
Dim neirong As String ="TemplateParamSet.0=987654"

Dim SecretId="AKIDOYdR4SUtON8qV69cZQ2PO8l9UfsrcyKI"

Dim text1 As String = "POSTsms.tencentcloudapi.com/?Action=SendSms&Language=zh-CN&N&" & haoma & "&Region=&SecretId=&Sign=基伟休闲&SmsSdkAppid=1400517359&TemplateID=947545&" & neirong & "&Timestamp=" & Timestamp & "&Version=2019-07-11"
Dim key1 = ""
Dim byteData = Encoding.utf8.GetBytes(text1)
Dim byteKey = Encoding.utf8.GetBytes(key1)
Dim hmac = new System.Security.Cryptography.HMACSHA1(byteKey)
Dim result = hmac.ComputeHash(byteData)
Dim s = Convert.ToBase64String(result )

Dim ul As String = s
Output.Show(UrlEncode(ul))
Signature  = UrlEncode(ul)


Dim hc As New HttpClient("https://sms.tencentcloudapi.com")
hc.C
hc.FormData.Add("Action","SendSms")
hc.FormData.Add("Language","zh-CN")
hc.FormData.Add("Nonce",Nonce)
hc.FormData.Add("SecretId","")
hc.FormData.Add("Region","")
hc.FormData.Add("Sign","基伟休闲")
hc.FormData.Add("PhoneNumberSet.0","+8615869553734")
hc.FormData.Add("SmsSdkAppid","1400517359")
hc.FormData.Add("TemplateID","947545")
hc.FormData.Add("TemplateParamSet.0","987654")
hc.FormData.Add("Timestamp",Timestamp)
hc.FormData.Add("Version","2019-07-11")
hc.FormData.Add("Signature",Signature)
Dim ret As String = hc.getData()
\'
Output.Show(ret)



以下为接口文档

https://cloud.tencent.com/document/api/382/38778


图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:33.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2021/5/6 11:38:36编辑过]

--  作者:有点蓝
--  发布时间:2021/5/6 14:27:00
--  
要使用SecretKey加密

Dim key1 = "Gu5t9xGARNpq86cd98joQYCN3*******"

有了安全凭证SecretId 和 SecretKey后,就可以生成签名串了。以下是生成签名串的详细过程:

假设用户的 SecretId 和 SecretKey 分别是:

  • SecretId: AKIDz8krbsJ5yKBZQpn74WFkmLPx3*******
  • SecretKey: Gu5t9xGARNpq86cd98joQYCN3*******
另外注意参数是否完整,加密的时候拼接的字符串各个参数是有顺序的:

2.1. 对参数排序

首先对所有请求参数按参数名的字典序( ASCII 码)升序排序。注意:1)只按参数名进行排序,参数值保持对应即可,不参与比大小;2)按 ASCII 码比大小,如 InstanceIds.2 要排在 InstanceIds.12 后面,不是按字母表,也不是按数值。