crc32
crc32 — 文字列の crc32 多項式計算を行う
説明
int crc32 ( string str )strの32ビット長のCRC(cyclic redundancy checksum)チェックサムを生成します。これは、受信されたデータの整合 性を検証するために通常使用されます。
なぜなら、PHP の整数型は符号付きで、多くの crc32 チェックサムは負の整数になるためで、符号なしの crc32 チェックサムの文字列表記を取得するには sprintf() もしくは printf() の "%u" フォーマッタを使用する必要があります。
この 2 番目の例は printf() 関数を用いた変換後のチェックサムの表示方法を示しています。 例 2256. crc32 チェックサムの表示
<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);
?>
md5(), sha1() も参照ください。
巡回冗長検査
(crc32 から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/06/28 04:58 UTC 版)
巡回冗長検査(じゅんかいじょうちょうけんさ、英: Cyclic Redundancy Check, CRC)は、誤り検出符号の一種で、主にデータ転送などに伴う偶発的な誤りの検出によく使われている。送信側は定められた生成多項式で除算した余りを検査データとして付加して送信し、受信側で同じ生成多項式を使用してデータを除算し、その余りを比較照合することによって受信データの誤り・破損を検出する。
- ^ Peterson, W. W. and Brown, D. T. (1961-1). “Cyclic Codes for Error Detection”. Proceedings of the IRE 49: 228. doi:10.1109/JRPROC.1961.287814. ISSN 0096-8390.
- ^ a b Brayer, K; Hammond, J L Jr. (1975). "Evaluation of error detection polynomial performance on the AUTOVON channel". Conference Record. National Telecommunications Conference, New Orleans, La. 1. New York: Institute of Electrical and Electronics Engineers. pp. 8-21 to 8-25.
- ^ “(slib) Cyclic Checksum”. 2008年4月6日閲覧。
- ^ Greg Cook (2008年9月9日). “Catalogue of parameterised CRC algorithms”. 2008年9月9日閲覧。
- ^ a b c Koopman, Philip; Chakravarty, Tridib (2004年), Cyclic Redundancy Code (CRC) Polynomial Selection For Embedded Networks
- ^ Castagnoli, G. and Braeuer, S. and Herrman, M. (1993-6). “Optimization of Cyclic Redundancy-Check Codes with 24 and 32 Parity Bits”. IEEE Transactions on Communications 41 (6): 883. doi:10.1109/26.231911. ISSN 0090-6778. - Castagnoli's et al. CRC多項式のアルゴリズム選択に関する研究
- ^ a b c d e f Koopman, P. (2002-6). “32-Bit Cyclic Redundancy Codes for Internet Applications”. The International Conference on Dependable Systems and Networks: 459. doi:10.1109/DSN.2002.1028931 . - Castagnoli の結果を総当り探索で検証し、新たによい多項式を発見した。
- ^ Perez, A.; Wismer & Becker (1983年). “Byte-Wise CRC Calculations”. IEEE Micro 3 (3): 40–50. doi:10.1109/MM.1983.291120. ISSN 0272-1732.
- ^ Ramabadran, T.V.; Gaitonde, S.S. (1988年). “A tutorial on CRC computations”. IEEE Micro 8 (4): 62-75. doi:10.1109/40.7773. ISSN 0272-1732.
- ^ Thomas Boutell, Glenn Randers-Pehrson, et al. (1998年7月14日). “PNG (Portable Network Graphics) Specification, Version 1.2”. 2008年4月28日閲覧。
CRC-32
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/05 03:09 UTC 版)
C言語での実装例。RFC 1952 (gzip) や RFC 2083 (PNG) の末尾にも実装例が載っている。zlib などにも含まれている。 uint32_t crc_table[256];void make_crc_table(void) { for (uint32_t i = 0; i < 256; i++) { uint32_t c = i; for (int j = 0; j < 8; j++) { c=(c & 1) ? (0xEDB88320 ^ (c>> 1)) : (c >> 1); } crc_table[i] = c; }}uint32_t crc32(uint8_t *buf, size_t len) { uint32_t c = 0xFFFFFFFF; for (size_t i = 0; i < len; i++) { c=crc_table[(c ^ buf[i]) & 0xFF] ^ (c>> 8); } return c ^ 0xFFFFFFFF;}int main(void){ make_crc_table(); uint32_t crc = crc32(); return 0;} 生成多項式を反転させない場合の実装例。 uint32_t crc_table[256];/* 事前にこの関数を実行しておくこと */void make_crc_table(void){ for(uint32_t i=0; i<256; i++){ uint32_t c = i << 24; for( int j=0; j<8; j++){ c = ( c << 1) ^ ( ( c & 0x80000000) ? 0x04C11DB7 : 0); } crc_table[i] = c; }}uint32_t crc32(uint8_t *buf, int len){ uint32_t c = 0xffffffff; for (int i = 0; i < len; i++) { c = (c << 8) ^ crc_table[((c>> 24) ^ buf[i]) & 0xff]; } return c;}
※この「CRC-32」の解説は、「巡回冗長検査」の解説の一部です。
「CRC-32」を含む「巡回冗長検査」の記事については、「巡回冗長検査」の概要を参照ください。
固有名詞の分類
- crc32のページへのリンク