.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

 

posted @ 2020-03-31 17:02  Vanling  阅读(235)  评论(0编辑  收藏  举报