.Net后端生成腾讯云COS存储对象API签名方法 VB代码
''' <summary> ''' '获取api签名方法 ''' </summary> ''' <param name="SecretId">SecretId</param> ''' <param name="SecretKey">SecretKey</param> ''' <param name="Flieurl">桶路径加文件名:xxx/xx.jpg</param> ''' <param name="HttpMethod">请求方式:put</param> ''' <returns></returns> Public Shared Function GetAuthorization(ByVal SecretId As String, ByVal SecretKey As String, ByVal Flieurl As String, ByVal HttpMethod As String) As String '开始时间 Dim StartTimestamp As DateTime = DateTime.Now '签名有效时间 单位秒,默认10分钟 Dim ExpiredTime As Integer = 600 '请求参数 Dim NVC As NameValueCollection = New NameValueCollection() '请求头 Dim RequestHeader As Net.WebHeaderCollection = New Net.WebHeaderCollection() HttpMethod = HttpMethod.ToLower() If StartTimestamp > DateTime.Now Then StartTimestamp = DateTime.Now '步骤1:生成 KeyTime Dim startTimestamplong As Long = (StartTimestamp.ToUniversalTime().Ticks - 621355968000000000) / 10000000 Dim endTimestamp As Long = startTimestamplong + ExpiredTime Dim keyTime As String = String.Format("{0};{1}", startTimestamplong, endTimestamp) '步骤2:生成 SignKey Dim SignKey As String = HMACSHA1(SecretKey, keyTime) '步骤3:生成 UrlParamList 和 HttpParameters Dim Key As List(Of String) = New List(Of String)() Dim KeyValue As List(Of String) = New List(Of String)() Dim Param As Dictionary(Of String, String) = New Dictionary(Of String, String)() If NVC IsNot Nothing Then For Each k In NVC.Keys Dim kk As String = HttpUtility.UrlEncode(k.ToString()).ToLower() Param.Add(kk, HttpUtility.UrlEncode(NVC(k.ToString()))) Key.Add(kk) Next Key.Sort() For Each k In Key KeyValue.Add(String.Format("{0}={1}", k, Param(k))) Next End If Dim HttpParameters As String = If(NVC IsNot Nothing, String.Join("&", KeyValue.ToArray()), "") Dim UrlParamList As String = If(NVC IsNot Nothing, String.Join(";", Key), "") '步骤4:生成 HeaderList 和 HttpHeaders Key.Clear() Dim Hearder As Dictionary(Of String, String) = New Dictionary(Of String, String)() If RequestHeader IsNot Nothing Then For Each k In RequestHeader.AllKeys Dim kk As String = HttpUtility.UrlEncode(k).ToLower() Hearder.Add(kk, HttpUtility.UrlEncode(RequestHeader(k))) Key.Add(kk) Next Key.Sort() KeyValue.Clear() For Each k In Key KeyValue.Add(String.Format("{0}={1}", k, Hearder(k))) Next End If Dim HttpHeaders As String = If(RequestHeader IsNot Nothing, String.Join("&", KeyValue.ToArray()), "") Dim HeaderList As String = If(RequestHeader IsNot Nothing, String.Join(";", Key), "") '步骤5:生成 HttpString Dim HttpString As String = String.Format("{0}" & vbLf & "{1}" & vbLf & "{2}" & vbLf & "{3}" & vbLf, HttpMethod, Flieurl, HttpParameters, HttpHeaders) '步骤6:生成 StringToSign Dim StringToSign As String = String.Format("sha1" & vbLf & "{0}" & vbLf & "{1}" & vbLf, keyTime, SHA1(HttpString)) '步骤7:生成 Signature Dim Signature As String = HMACSHA1(SignKey, StringToSign) '步骤8:生成签名 Dim qianming As String = String.Format("q-sign-algorithm=sha1&q-ak={0}&q-sign-time={1}&q-key-time={1}&q-header-list={2}&q-url-param-list={3}&q-signature={4}", SecretId, keyTime, HeaderList, UrlParamList, Signature) Return qianming End Function 'HMACSHA1加密方法 Public Shared Function HMACSHA1(ByVal secretKey As String, ByVal content As String) As String Dim keyByte As Byte() = Encoding.[Default].GetBytes(secretKey) Dim hmacsha1s As System.Security.Cryptography.HMACSHA1 = New System.Security.Cryptography.HMACSHA1(keyByte) Dim messageBytes As Byte() = Encoding.[Default].GetBytes(content) Dim hashmessage As Byte() = hmacsha1s.ComputeHash(messageBytes) Dim sb As StringBuilder = New StringBuilder("") For Each b As Byte In hashmessage sb.AppendFormat("{0:x2}", b) Next Return sb.ToString() End Function 'SHA1加密方法 Public Shared Function SHA1(ByVal content As String) As String Dim sha1s As System.Security.Cryptography.SHA1CryptoServiceProvider = New System.Security.Cryptography.SHA1CryptoServiceProvider() Dim c As Byte() = Encoding.[Default].GetBytes(content) Dim sc As Byte() = sha1s.ComputeHash(c) Dim sb As StringBuilder = New StringBuilder("") For Each b As Byte In sc sb.AppendFormat("{0:x2}", b) Next Return sb.ToString() End Function