md5 — перевести несколько & gt; 32-битных операций для работы в 32-битной среде php

Мой веб-хост сообщает, что PHP_INT_MAX это 2147483647, то есть это 32-битная среда. Я пытаюсь преобразовать пару математических операций, которые в настоящее время работают в 64-битной среде, чтобы они также работали в 32-битной среде.

$id = '76561197996545192';
$temp = '';
for ($i = 0; $i < 8; $i++)
{
$temp .= chr($id & 0xFF);
$id >>= 8;
}
$result= md5('BE' . $temp);
echo $result;

Вышеуказанные урожаи de46c6d30bfa6e097fca82f63c2f4f4c в 32-битной среде, но на самом деле это должно дать cd97cc68c1038b485b081ba2aa3ea6fa (что он в настоящее время делает в 64-битной среде). Я предполагаю, что оператор bithift вызывает несоответствие, но я не уверен (я не php-эксперт и не математик, и я не автор оригинального кода 🙂

BCMath устанавливается в 32-битной среде, и могут быть установлены другие фреймворки (при необходимости я могу проверить phpinfo).

Как мне исправить это? Является ли это возможным?

// Линус

Изменить: Да, я знаю, что код выглядит странно, но он работает точно так, как задумано в 64-битной среде.

1

Решение

Мне кажется, что побитовые операции на самом деле не делают то, что вы ожидаете от них, так как $ id является строкой. Я понимаю, что это не может быть целым числом, поскольку оно будет слишком большим для 32-разрядной системы. Может быть, вы пытались обработать последние 3 символа $ id и сделать их целым числом? Это будет код для этого:

$id = '76561197996545192';
$temp = '';
for ($i = 0; $i < 8; $i++) {
$tnbr = intval(substr($id, -3));
$char = chr($tnbr & 0xFF); // Is the bitwise to make them valid chars? Maybe skip that part?
$temp .= $char;
$id = substr($id, 0, strlen($id) - 3);
}

$result = md5('BE' . $temp);
echo $result;

Это дает мне результат 98b0f4cc942bfe4a22dd7877ae3e9f06.

Я не уверен, какова цель этого математического алгоритма, но, возможно, мне не нужно 🙂

Удачи!
/ Wille

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]