2017-03-31 5 views
-2

Ich habe gearbeitet, versucht, eine C# Entsprechung einer PHP-API zu erhalten, bekam ich Fehlermeldung als ungültiger Hash, also habe ich beschlossen, den Code in Teilen zu brechen und zu überprüfen die Ausgabe des einzelnen Teils für PHP und C#. Im Folgenden finden Sie, was ich habe:Wie bekomme ich das gleiche aus PHP-Hash mit C#

Der Code und aus php ref setzen:

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

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

In meinem C# -Code für ref wird wie folgt:

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 

Die PHP-Hash-out setzen mit die folgenden Variablen sind wie folgt:

$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 

Dann die C# out mit der gleichen var iables und die gleiche PHP ref löschte

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 

Hier entdeckte ich, dass die aus meiner C# ist anders setzen sich von der php. Also, was könnte das Problem mit meinem Code sein, ich möchte das Gleiche aus dem von PHP mit den gleichen Variablen setzen.

Eine gute Idee, dies zu lösen, ist willkommen.

+2

Sie können dieselbe Zufallszahl nicht gleichzeitig an zwei verschiedenen Orten erzeugen. –

+0

und die Implementierungen von php: 'mt_rand' (ein Mersenne-Twister-Typ-Generator) und Microsoft.NET' Random', eine auf Knuth-Subtraktion basierende Routine, sind nicht identisch. Das bedeutet, dass sie selbst mit demselben Samen niemals dieselbe Sequenz erzeugen werden. Beide werden nicht für die Verwendung mit Kryptografie empfohlen, da sie zu vorhersehbar sind. – dlatikay

Antwort

2

In Ihrem C# -Code ist der Wert task"Pay". Im PHP-Code ist es "pay".

Unterschiedliche Eingabewerte werden natürlich nicht gleich hashen.

+0

Sicher war das Problem, ich habe "Bezahlen" in "Bezahlen" geändert und ich habe das Gleiche raus gestellt –

Verwandte Themen