Maison  >  Article  >  développement back-end  >  Solution aux pièges PHP crc32

Solution aux pièges PHP crc32

*文
*文original
2017-12-27 09:42:494790parcourir

Quels pièges le crc32 de PHP rencontrera-t-il ? Comment le résoudre ? Cet article présente principalement les problèmes auxquels il faut prêter attention lors de l'utilisation de la fonction crc32 de PHP. J'espère que cela sera utile à tous ceux qui utilisent crc32.

J'ai écrit un programme de fractionnement de table il y a quelques jours. L'algorithme de hachage utilisé est crc32. La fonction de fractionnement de table est la suivante :

function _getHash($username)
    {
        $hash = crc32($username) % 512;
        return $hash;
    }

    function _getTable($username)
    {
        $hash = self::_getHash($username);
        return 'user_' . $hash;
    }


.
Tout d'abord, générez les données sur la machine Windows locale 32 bits et insérez-les dans la table correspondante. Mais lorsque j'ai transféré le programme et les données sur le serveur (64 pour Linux), j'ai constaté que les données étaient introuvables. Après enquête, il a été découvert que les résultats crc32 sur le serveur étaient différents de ceux localement. Après avoir vérifié à nouveau le manuel PHP, j'ai découvert que l'interface crc32 est liée à la machine.
Description du manuel PHP :

Because PHP's integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all crc32() results will be positive integers though.


Le résultat renvoyé par crc32 va déborder sur une machine 32 bits, le résultat peut donc être un nombre négatif. Sur une machine 64 bits, il n’y a pas de débordement, il est donc toujours positif.

L'algorithme CRC est calculé en fonction du nombre de bits dans la longueur du mot.

La fonction crc32 calculera PHP_INT_SIZE et PHP_INT_MAX en fonction des deux références constantes dans php
La définition de ces deux constantes :
La longueur en mots du nombre entier dépend de la plateforme, bien que la longueur maximale la valeur est généralement d'environ deux milliards (signé 32 bits). PHP ne prend pas en charge les entiers non signés. La longueur de mot d'une valeur entière peut être représentée par la constante PHP_INT_SIZE Depuis PHP 4.4.0 et PHP 5.0.5, la valeur maximale peut être représentée par la constante PHP_INT_MAX.
Sortie PHP_INT_SIZE : 4, PHP_INT_MAX : 2147483647 en 32 bits 🎜>Recommandations associées :


Fonction php crc32() pour calculer le CRC 32 bits d'une chaîne

CRC32, C'est facile d'entrer en conflit, comment y faire face ?

Comment. utilisez la fonction crc32 en PHP pour vérifier les données

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn