PHP crc32 함정 솔루션

*文
풀어 주다: 2023-03-18 15:24:01
원래의
4792명이 탐색했습니다.

PHP의 crc32는 어떤 함정에 직면하게 되나요? 어떻게 해결하나요? 이번 글에서는 PHP의 crc32 함수를 사용할 때 주의해야 할 사항을 주로 소개합니다. crc32를 사용하시는 모든 분들께 도움이 되었으면 좋겠습니다.

저는 며칠 전에 테이블 분할 프로그램을 작성했습니다. 사용된 해시 알고리즘은 다음과 같습니다. 테이블 분할 기능은 다음과 같습니다.

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

    function _getTable($username)
    {
        $hash = self::_getHash($username);
        return 'user_' . $hash;
    }
로그인 후 복사



먼저 로컬 32비트 윈도우 머신에서 데이터를 생성하고 삽입합니다. 해당 테이블에 넣으세요. 그런데 프로그램과 데이터를 서버(Linux의 경우 64)로 전송해 보니 해당 데이터를 찾을 수 없는 것을 발견했습니다. 조사 결과, 서버의 crc32 결과가 로컬 결과와 다른 것으로 확인되었습니다. PHP 매뉴얼을 다시 확인한 결과, crc32 인터페이스가 해당 머신과 관련이 있다는 것을 알게 되었습니다.
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.
로그인 후 복사


crc32에서 반환된 결과는 32비트 시스템에서 오버플로되므로 결과가 음수가 될 수 있습니다. 64비트 시스템에서는 오버플로가 없으므로 항상 양수입니다.

CRC 알고리즘은 단어 길이의 비트 수를 기준으로 계산됩니다.

crc32 함수는 php의 두 상수 참조에 따라 PHP_INT_SIZE 및 PHP_INT_MAX를 계산합니다.
이 두 상수의 정의:
정수의 단어 길이는 플랫폼에 따라 다르지만 최대값은 일반적으로 약 20억(32-32)입니다. 비트 서명됨). PHP는 부호 없는 정수를 지원하지 않습니다. 정수값의 단어 길이는 PHP_INT_SIZE 상수로 표현할 수 있습니다. PHP 4.4.0, PHP 5.0.5부터 최대값은 PHP_INT_MAX 상수로 표현할 수 있습니다.
출력 PHP_INT_SIZE: 4, PHP_INT_MAX: 2147483647(32비트 출력)
PHP_INT_SIZE: 8, PHP_INT_MAX: 9223372036854775807(64비트 출력)


관련 권장 사항:

php는 32비트 CRC를 계산합니다. string 함수 crc32()

CRC32, 충돌하기 쉽습니다. 처리 방법

PHP에서 crc32 함수를 사용하여 데이터를 확인하는 방법

위 내용은 PHP crc32 함정 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!