Partage
  • Partager sur Facebook
  • Partager sur Twitter

différence SHA256 C# et PHP

    20 janvier 2021 à 10:33:17

    Bonjour

    Merci pour ta réponse,

    Il y a une procédure de connexion sur une API, et je n'ai qu'un exemple en C#.
    L'application web où je vais devoir me connecter sur l'API tourne en PHP 7.2.
    L'Objectif est d'arriver déjà à réaliser la même signature pour pourvoir me connecter.
    C'est le hashage SHA256 qui donne un résultat différent et qui ne permet pas l'autorisation.

    le code référence  est en fin de compte en C# et non en C, j'ai réussi à le reconstruire pour tester.

    var temp = "/gggg";
                var strIntegratorKey = "1f09ae15-017a-4806-bcd6-825532123455";
                var timeStamp = "20210114124401";
                var utf8 = new System.Text.UTF8Encoding(false);
                var keyBytes = utf8.GetBytes(strIntegratorKey.ToString().ToLower());
                string signature;
                using (var hmacSha256 = new System.Security.Cryptography.HMACSHA256(keyBytes))
                {
                    var signatureBytes = utf8.GetBytes(String.Concat(temp, timeStamp));
                    signature = Convert.ToBase64String(hmacSha256.ComputeHash(signatureBytes));
                }
                Console.WriteLine(signature);

    résultat en C# rdSay3xHElJh7xQj6l4LFYniVVVPVSwc46jpoXY+y8o=

    en php

    $testKey="1f09ae15-017a-4806-bcd6-825532123455";
    $testkey1
    =utf8_encode(strtolower($testkey));
    $bytes = "";
    for
    ($i = 0; $i < strlen($testkey1); $i++){
        $bytes.= ord($testkey1[$i]).";";
    }
    $keyToBytes=$bytes;
    echo $keyToBytes."<br>";
    //result
    $keyToBytes =
    49;102;48;57;97;101;49;53;45;48;49;55;97;45;52;56;48;54;45;98;99;100;54;45;56;50;53;53;51;50;49;50;51;52;53;53;
    //
    $exemple="/gggg20210114124401";
    $text=utf8_encode($exemple); $bytes = "";
    for($i = 0; $i < strlen($text); $i++){
       $bytes
    .= ord($text[$i]).";";
    }
    $signatureBytes
    =$bytes;
    echo
    $signatureBytes."<br>";
    //result
    $signatureBytes = 47;103;103;103;103;50;48;50;49;48;49;49;52;49;50;52;52;48;49; $hm=hash_hmac("sha256",$signatureBytes,$keyToBytes ,true);
    $hm64
    =base64_encode($hm);
    echo
    $hm64."<br>";

    brvlMd5OrT1BQlrdJKfo5qXJrx7ihpa3BIUn1x8w0us=

    -
    Edité par FranckC6 23 janvier 2021 à 11:09:34

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2021 à 13:37:00

      Bonjour,

      J'avoue ne pas trop comprendre ton post ... Quel script en C ??? 

      Je suppose que tu voudrais hasher / crypter un mot de passe ?

      Il y a plein de tuto sur le net pour le faire : pourquoi utiliser hash_hmac puis encoder en base64 ?

      Quelques références :

      http://php.adamharvey.name/manual/fr/faq.passwords.php

      https://www.php.net/manual/fr/function.password-hash.php#:~:text=La%20fonction%20password_hash()%20cr%C3%A9e,avec%20la%20fonction%20password_hash().

      A+

      -
      Edité par monkey3d 20 janvier 2021 à 16:36:54

      • Partager sur Facebook
      • Partager sur Twitter
        22 janvier 2021 à 15:14:47

        bien noté j'ai modifié le post 1

        je cherchais à recréer chaque étape, inutile avec PHP

        la solution toute simple, pas besoin de décomposer les variables en digit.

        $testKey="1f09ae15-017a-4806-bcd6-825532123455"; $message = '/gggg20210114124401'; $hm=hash_hmac("sha256", $message, $testKey,true); $hm64=base64_encode($hm);

        -
        Edité par FranckC6 23 janvier 2021 à 13:51:51

        • Partager sur Facebook
        • Partager sur Twitter

        différence SHA256 C# et PHP

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown