簡體   English   中英

將 C# API 請求轉換為 PHP

[英]Convert C# API Request to PHP

我需要連接到外部 API 並且提供商僅在 C# 中提供了示例。

這是用於生成身份驗證令牌的 C# 代碼。

public static void Main()
{
    string json = @"{
      Agent : "XXX",
      Group: "XXXXXXX"
    }";

    string publicKey = "XXXXXXXXXXXXXXXXXX"

    byte[] agentBytes = Encoding.UTF8.GetBytes(json);

    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

    var rsa2Params = rsa.ExportParameters(false);
    rsa2Params.Modulus = Convert.FromBase64String(publicKey);
    rsa.ImportParameters(rsa2Params);

    byte[] hashValue = rsa.Encrypt(agentBytes, true);

    string output = Convert.ToBase64String(hashValue);
    Console.WriteLine(output);
}

我已經驗證了 RSA.php class

$rsa = new phpseclib\Crypt\RSA;
$keys = $rsa->createKey();

$json = json_encode([
   'Agent' => 'XXX',
   'Group' => 'XXXXXXX'
]);

$rsa->loadKey($keys['privatekey']);

$output = base64_encode($rsa->encrypt($json));

output 給了我一個 Auth Key 用於 header 請求。 我希望我走在正確的軌道上,我收到 API 回復說“找不到代理”

這是 C# 轉換為 PHP

$rsa = new \phpseclib\Crypt\RSA();

$json = json_encode([
   'Agent' => 'XXX',
   'Group' => 'XXXXXX'
]);

$publicKey = 'XXXXXXXXXXXXXXXXXX';
$exponent = 'AQAB';

$public = [
    'n' => new \phpseclib\Math\BigInteger(base64_decode($publicKey), 256),
    'e' => new \phpseclib\Math\BigInteger(base64_decode($exponent), 256),
];

$rsa->loadKey($public);

$token = base64_encode($rsa->encrypt($json));

PHP的例子對我來說是不一致的:

你有:

$json = json_encode([
   'Agent' => 'XXX',
   'Group:' => 'XXXXXXX'
]);

有冒號:對於組,但沒有代理的冒號,你可能應該有一個冒號或者根本沒有冒號。

在 C# 示例中也有多個引號(我不知道 C#),但 PHP 的正確 JSON 可能是:

$json = json_encode([
   'Agent' => '"XXX"',
   'Group' => '"XXXXXXX"'
]);

或者

$json = json_encode([
   'Agent:' => '"XXX"',
   'Group:' => '"XXXXXXX"'
]);

最有可能工作:

$json = json_encode([
   'Agent' => 'XXX',
   'Group' => 'XXXXXXX'
]);

暫無
暫無

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

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