簡體   English   中英

將C#哈希代碼轉換為PHP以進行REST API連接

[英]Convert C# Hash Code to PHP for REST API Connection

以下是用於連接到API的文檔摘錄。 我需要使用PHP建立此連接,但是我要簡短了。 公鑰和私鑰的示例如下:

  • 公鑰: 9cd52302-85cf-406d-98df-d3e19eea907c
  • 私鑰: 7cd0e56a-a62f-4f05-ab8c-e1a2255c9732

下面是帶有C#示例的文檔。 從我所讀的內容來看,我的問題似乎是C#和PHP中的哈希運算之間的區別,但是我似乎找不到正確的組合。 我的每一次嘗試都會導致來自“無效的用戶名或密碼” API的響應。 我從hash_hmac('sha256',$ data,$ privateKey)返回的密鑰是小寫的,看起來與示例不一樣。 我了解UTF8和Base64編碼要求,但是散列讓我感到困惑。 任何幫助是極大的贊賞。 摘錄如下:

授權令牌

授權令牌由{Rep Public Key}:{Request Signature}(顏色編碼為強調)組成。 公鑰標識發出請求的用戶。 請求簽名是一個安全的,系統生成的字符串,類似於密碼,由關於請求的幾條信息組成,並使用HMAC SHA-256和代表的私鑰進行了加密。 收到請求后,API會嘗試匹配簽名。

創建授權令牌

請按照以下步驟加密請求簽名和rep公鑰:

  1. 將utf8編碼應用於rep私鑰和請求簽名,即{HTTP方法} | {URI} | {時間戳記}。
  2. 將簽名字符串轉換為小寫。
  3. 使用HMAC SHA-256和代表的私鑰對簽名字符串進行加密。
    • 示例: get | / api / accounts / 1052932 | thu,2015年6月18日07:25:43 gmt
    • 成為: RVg3YCtybLImF68rEumuPLCCApLnPIyNvb0hfxH + ek4 =
  4. 將Base64編碼應用於{Rep Public Key}:{Encrypted Request Signature}字符串。
    • 例如: 3383259B-9FBA-486E-97A8-E81893741F83:RVg3YCtybLImF68rEumuPLCCApLnPIyNvb 0hfxH + ek4 =
    • 成為: MzM4MzI1OUItOUZCQS00ODZFLTk3QTgtRTgxODkzNzQxRjgzOlJWZzNZQ3R5YkxJbU Y2OHJFdW11UExDQ0FwTG5QSXlOdmIwaGZ4SCtlazQ9

.NET C#中的加密代碼

var encoding = new System.Text.UTF8Encoding();
var keyByte = encoding.GetBytes(secret);
var messageBytes = encoding.GetBytes(message);
using (var hmacsha256 = new HMACSHA256(keyByte))
{
    var hashmessage = hmacsha256.ComputeHash(messageBytes);
    return Convert.ToBase64String(hashmessage);
}

解決。 第三步應該有第二步。 您也必須對Base64編碼簽名字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM