差分

ナビゲーションに移動 検索に移動

CRC-32

1,626 バイト追加, 2022年12月2日 (金) 05:21
ページの作成:「'''CRC-32'''(語源:Cyclic Redundancy Check 32)、チェックサムを算出するアルゴリズムのひとつである。 CRCシリーズは「CRC-1」…」
'''CRC-32'''(語源:Cyclic Redundancy Check 32)、[[チェックサム]]を算出する[[アルゴリズム]]のひとつである。

CRCシリーズは「CRC-1」から「CRC-256」くらいまで大量に存在しているが、このうち[[CRC-16]]とCRC-32は「非常に軽い」「結果が16ビット整数や32ビット整数」などの理由で今なお広く使われている。

似たようなあるごリムに[[MD5]]や[[SHA1]]などの[[ハッシュ関数]]があるが、これらの結果は「[[文字列]](より正確には[[BigInteger]])」となってしまうため、[[組込]]などの世界では非常に扱いにくいということもあり、今なおCRC-16やCRC-32が現役で使われている。

== C# での実装例 ==
C# での実装例。
<source lang="csharp">
using System;
using System.Collections.Generic;
using System.Linq;

class CRC32
{
static readonly uint[] crcTable;

public CRC32
{
Init();
}

void Init()
{
// crc_tableを生成する
var crcTable = new uint[256];
for (uint i = 0; i < 256; i++)
{
uint c = i;
for (int j = 0; j < 8; j++)
{
c = (c & 1) == 0 ? (c >> 1) : (c >> 1) ^ 0xEDB88320;
}
crcTable[i] = c;
}
}

public uint Calc(byte[] data)
{
// dataのCRC32を計算する
uint crc = 0xFFFFFFFF;
foreach (var b in data)
{
crc = (crc << 8) ^ crcTable[b ^ (crc >> 24)];
}
crc = crc ^ 0xFFFFFFFF;
return uint;
}
}
</source>

案内メニュー