У меня есть эта функция в C #.
public static implicit operator Guid(TCPPacketReader p)
{
byte[] tmp = new byte[16];
Array.Copy(p.Data.ToArray(), p.Position, tmp, 0, tmp.Length);
p.Position += 16;
using (MD5 md5 = MD5.Create())
tmp = md5.ComputeHash(tmp); //wtf?
return new Guid(tmp);
}
Я пытаюсь повторить эту функциональность в PHP. Проблема в том, что когда я получаю эту переменную tmp в массиве. это возвращает что-то вроде:
array[5, 49, 42, 5, 254, 160, 191, 64, 79, 37, 216, 169, 201, 181, 13, 0, 59, 187]
и я действительно не знаю, как сделать это computeHash (tmp) в php. Я пытался сделать это с помощью функции PHP md5 (), но вернуть нулевой объект. Я много гуглил, но ничего не получилось. Кто-нибудь знает, как это сделать?
Первый: MD5.Create().ComputeHash(tmp);
делает его немного более читабельным (в данном случае)
Что делает C #, так это принимает массив байтов. То, что делает PHP, это взять строку. Если вы хотите, чтобы входные данные для PHP были массивом байтов, вы должны сначала преобразовать его в строку
$tmp = md5(implode(array_map("chr", $tmp)));
// the implode and array_map turn tmp into a string, from an array containing the byte's ASCII codes (1-255)
C # md5.ComputeHash(tmp)
возвращает массив байтов хэша
PHP md5(tmp)
возвращает строку, содержащую шестнадцатеричное представление хеша
так как вы не предоставили код для PHP, я не могу ответить на вопрос. Но это должно помочь вам.
Других решений пока нет …