2017-03-31 10 views
-2

PHPのAPIに相当するC#を取得しようとしていますが、無効なハッシュとしてエラーメッセージが表示されていましたので、 PHPとC#の両方のための個々の部分の出力。コードC#で同じようにPHPハッシュを取得するには

とアウトPHP refの入れ:以下 は、私が得たものである次のように参照のための私のC#コードで

$ref = time().mt_rand(0,9999999); 

----Out put as at the time it was tested---- 
14909496966594256 

は次のとおりです。

string refl = (DateTime.UtcNow .Subtract(new DateTime(1970, 1, 1, 0, 0, 0, 0))).TotalSeconds + rnd.Next(0, 9999999).ToString(); 

----Out put as at the time it was tested---- 

1490602845.686821282389 

に入れPHPのハッシュアウト次の変数は次のとおりです。

$task = 'pay'; 
$merchant_email_on_voguepay = '[email protected]'; 
$ref = '14909496966594256'; 
$command_api_token = '9ufkS6FJffGplu9t7uq6XPPVQXBpHbaN'; 
$hash = hash('sha512',$command_api_token.$task.$merchant_email_on_voguepay.$ref); 

----Out put ---- 
1cee97da4c0b742b6d5cdc463914fe07c04c6aff8d999fb7ce7aaa05076ea17577752ecf8947e5b98e7305ef09e0de2fed73e4817d906d6b123e54c1f9b15e74 

次に、同じvar iablesと同じPHP ref out put

const string task = "Pay"; 
const string command_api_token = "9ufkS6FJffGplu9t7uq6XPPVQXBpHbaN"; 
const string merchant_email_on_voguepay = "[email protected]"; 

    Random rnd = new Random(); 
    string refl = "14909496966594256"; 
    string hash_target = (command_api_token + task + merchant_email_on_voguepay + refl); 

    SHA512 sha512 = new System.Security.Cryptography.SHA512Managed(); 

    var bytes = UTF8Encoding.UTF8.GetBytes(hash_target); 
    string cryString = BitConverter.ToString(sha512.ComputeHash(bytes)); 
    string hashD = (cryString).Replace("-", string.Empty).ToLower(); 

    ----Out put ---- 
551b057b64f49fc6bd7d428a8e3c36ddaab5e468fd5f9042ad5d4a4fa50349e5312ad2097b4e46d1e74a5a3f4e843848352edb0ea7073dd1cd53b1c4c14ab286 

ここで、私はC#の出力がPHPのものとは異なることを発見しました。だから私のコードで問題がある可能性があります、私は同じ変数を使用してPHPのそれを入れて取得したいと思います。

これを解決するための良いアイデアは大歓迎です。

+2

同じ乱数を2つの異なる場所で同時に生成することはできません。 –

+0

とphp: 'mt_rand'(メルセンヌ・ツイスター・タイプ・ジェネレーター)とMicrosoft.NET'Random'(Knuth-subtractiveベースのルーチン)の実装は全く同じではありません。同じシードであっても、同じシーケンスを作成することはありません。あまりにも予測可能なので、どちらも暗号の使用には推奨されません。 – dlatikay

答えて

2

C#コードでは、taskの値は"Pay"です。 PHPコードでは"pay"です。

異なる入力値は当然同じハッシュではありません。

+0

確かに問題でした。私は "Pay"を "Pay"に変更しました。私は同じものを出しました –

関連する問題