Задать вопрос
dllweb
@dllweb

Почему аналог хеш-функции js на php дает разные хеши?

Доброго времени друзья, я вам принес немного жути из js которую хотел перевести на php
вопрос, почему хеши разные? привожу код, сначала js функции потом аналог её в php

Функция на JAVASCRIPT
pastebin.com/RL21GShg
Функция на PHP
pastebin.com/mZsYhHap

На js хеш: c4cf282458ea415fc58cd9a2a98d9b284a1a494e99fce5e96bc117b924361e00
На PHP хеш: 0000000000000000000000000000000000000000000000000000000000000000

Почему так? Что пошло не так, не понимаю!
  • Вопрос задан
  • 710 просмотров
Подписаться 1 Оценить 6 комментариев
Пригласить эксперта
Ответы на вопрос 3
alsopub
@alsopub
Смущает этот момент:
JS:
if (s[0] = v, s[16] = s[1] = s[2] = s[3] = s[4] = s[5] = s[6] = s[7] = s[8] = s[9] = s[10] = s[11] = s[12] = s[13] = s[14] = s[15] = 0) { ... }

PHP:
if ($s[0] = $v and $s[16] = $s[1] = $s[2] = $s[3] = $s[4] = $s[5] = $s[6] = $s[7] = $s[8] = $s[9] = $s[10] = $s[11] = $s[12] = $s[13] = $s[14] = $s[15] = 0) { ... }

Кажется что "запятая" в JS и "and" в PHP сработают по разному.

Попробуйте
if ($s[0] = $v and $s[16] = $s[1] = $s[2] = $s[3] = $s[4] = $s[5] = $s[6] = $s[7] = $s[8] = $s[9] = $s[10] = $s[11] = $s[12] = $s[13] = $s[14] = $s[15] = 0) {

Заменить на
$s[0] = $v;
if ($s[16] = $s[1] = $s[2] = $s[3] = $s[4] = $s[5] = $s[6] = $s[7] = $s[8] = $s[9] = $s[10] = $s[11] = $s[12] = $s[13] = $s[14] = $s[15] = 0) {


PS. Ниже в комментариях показал строчку из программы с битовыми операциями, дающий разный результат на js и php, что является дополнительной проблемой вносящей ошибку.
Ответ написан
Insolita
@Insolita
Отчаянная домохозяйка
phpunit + xdebug в помощь
в первую очередь проверить функцию charCodeAt
Ответ написан
Noizefan
@Noizefan
Меня одного смущает оператор присвоения в условиях вместо оператора ==, или я что-то не понимаю?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы