【问题标题】:How to decrypt the amazon report-document from amazon selling partner api如何从亚马逊销售合作伙伴 api 解密亚马逊报告文件
【发布时间】:2021-05-26 18:13:55
【问题描述】:

报告文档API 获取报告文档接口

"response": {
              "payload": {
                "reportDocumentId": "0356cf79-b8b0-4226-b4b9-0ee058ea5760",
                "url": "https://d34o8swod1owfl.cloudfront.net/SampleResult%2BKey%3DSample%2BINITVEC%3D58+fa+bf+a7+08+11+95+0f+c1+a8+c6+e0+d5+6f+ae+c8",
                "encryptionDetails": {
                  "standard": "AES",
                  "initializationVector": "58 fa bf a7 08 11 95 0f c1 a8 c6 e0 d5 6f ae c8",
                  "key": "Sample"
                }
              }
            }

当我直接访问这个 URL "url": "https://d34o8swod1owfl.cloudfront.net/SampleResult%2BKey%3DSample%2BINITVEC%3D58+fa+bf+a7+08+11+95+0f+c1+a8+c6+e0+d5+6f+ae+c8",自动下载文件,我应该用AES解密文件吗? 初始化向量是用Base64编码的吗? 如何获取报告?

【问题讨论】:

    标签: c# amazon amazonsellercentral


    【解决方案1】:

    通过 url 下载文件后(你只有 5 分钟的时间),你必须解密它。因此,按字节(二进制)下载它并使用密码模式 CBC 使用 AES(最初称为 Rijndael)对其进行解密。 如您所想,密钥和初始化向量是 base 64 编码的。她是 C# 中的一些示例代码:

    GetReportDocumentResponse requestResult = ... //your request to getreportdocument here
    byte[] rawData = new System.Net.WebClient().DownloadData(requestResult.payload.url);
    byte[] key = Convert.FromBase64String(requestResult.payload.encryptionDetails.key);
    byte[] iv = Convert.FromBase64String(requestResult.payload.encryptionDetails.initializationVector);
    
    string documentText; // this will contain the decrypted document
    using (var rijndaelManaged = new RijndaelManaged { Key = key, IV = iv, Mode = CipherMode.CBC })
    using (var memoryStream = new MemoryStream(rawData))
    using (var cryptoStream = new CryptoStream(memoryStream, rijndaelManaged.CreateDecryptor(key, iv), CryptoStreamMode.Read))
    {
        documentText = new StreamReader(cryptoStream).ReadToEnd();
    }
    

    【讨论】:

      【解决方案2】:

      //这是我的工作代码
      ++++++++++++++++++++++++++++++

      response3 = reportsApi.GetReportDocument("Give_your_ReportDocumentId");
                  
      byte[] rawData = new System.Net.WebClient().DownloadData(response3.Payload.Url);
      byte[] key = Convert.FromBase64String(response3.Payload.EncryptionDetails.Key);
      byte[] iv = Convert.FromBase64String(response3.Payload.EncryptionDetails.InitializationVector);
      
      var reportData = ReportsApiTests.DecryptString(key, iv, rawData);
      File.WriteAllText(report_type + ".txt", reportData);
      
      
      public static string DecryptString(byte[] key, byte[] iv, byte[] cipherText)
      {
          byte[] buffer = cipherText;
      
          using (Aes aes = Aes.Create())
          {
              aes.Key = key;
              aes.IV = iv;
              ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
      
              using (MemoryStream memoryStream = new MemoryStream(buffer))
              {
                  using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, decryptor, CryptoStreamMode.Read))
                  {
                      using (StreamReader streamReader = new StreamReader((Stream)cryptoStream))
                      {
                          return streamReader.ReadToEnd();
                      }
                  }
              }
          }
          
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-20
        • 2022-08-12
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 2022-07-29
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多