Сделать PHP md5-хэш-совпадением C # -хэш - PullRequest
0 голосов
/ 23 мая 2019

У меня есть код на C #, который я пытаюсь переписать на PHP, когда дело доходит до записи, мой результат PHP не совпадает с хешем в БД, сгенерированной кодом C #

public sealed class MD5Encryption
  {
    [DebuggerNonUserCode]
    public MD5Encryption()
    {
    }

    public static string Encode(string message)
    {
      return Base64.ConvertToBase64(new MD5CryptoServiceProvider().ComputeHash(new UTF8Encoding().GetBytes(message)));
    }

    public static string EncodeWithSalt(string message, string salt)
    {
      return MD5Encryption.Encode(salt + message);
    }
  }

Вот C # ConvertToBase64

    public static string ConvertToBase64(byte[] inputBytes)
    {
      return Convert.ToBase64String(inputBytes, 0, inputBytes.Length);
    }
        $string='6ec95f40-9fe3-4014-87d6-40c3b1fff77e'.'Danil18';
        $strUtf8 = mb_convert_encoding($string, "UTF-8");
        $encoded=md5($strUtf8);
        $value=unpack('H*', $encoded);

        echo base64_encode($encoded);//doesn't match maIdHxLbyqD2WkntiLGh2w==

Как показано в коде соль 6ec95f40-9fe3-4014-87d6-40c3b1fff77e пропуск Danil18. Значение БД maIdHxLbyqD2WkntiLGh2w==, Вывод PHP OTlhMjFkMWYxMmRiY2FhMGY2NWE0OWVkODhiMWExZGI=

Правильн ли этот код, и мне не хватает некоторого преобразования текста в классе C #?

UPDATE: После копания в C # base64 этот код все еще не выводит тот же результат

        $string='6ec95f40-9fe3-4014-87d6-40c3b1fff77e'.'Danil18'; //doesn't match maIdHxLbyqD2WkntiLGh2w==
        $string='e734cc98-71bd-45ca-b02c-3b0cf020eb6d'.'x160126@nwytg.net'; //KNv0/uYGHDYuSRxvgYdPoQ==
        $strUtf8 = mb_convert_encoding($string, "UTF-8");
        $encoded=md5($strUtf8);
        //$value=unpack('H*', $encoded);
        $value=unpack('C*', $encoded);

        $chars = array_map("chr", $value);
        $bin = join($chars);
        $hex = bin2hex($bin);

        //$bin = hex2bin($value);
        //print_r($value);
        echo base64_encode($hex);//doesn't match maIdHxLbyqD2WkntiLGh2w== , KNv0/uYGHDYuSRxvgYdPoQ==

1 Ответ

1 голос
/ 23 мая 2019

так, это было довольно сложно, но хорошо :) если вы посмотрите здесь есть второй параметр для функции md5.

используйте его и получите тот же результат:

<?php
$string = '6ec95f40-9fe3-4014-87d6-40c3b1fff77e'.'Danil18';
$string = utf8_encode($string);
$string = md5($string, true);

echo base64_encode($string);

выход:

maIdHxLbyqD2WkntiLGh2w==

демо

...