C# 和 OpenResty 中进行 CRC32
一、C# 进行 CRC32public class CRC32
{
private static readonly uint[] _crc32Table;
static CRC32()
{
uint crc;
_crc32Table = new uint;
int i, j;
for (i = 0; i < 256; i++)
{
crc = (uint)i;
for (j = 8; j > 0; j--)
{
if ((crc & 1) == 1)
crc = (crc >> 1) ^ 0xEDB88320;
else
crc >>= 1;
}
_crc32Table = crc;
}
}
/// <summary>
/// 获取CRC32校验值
/// </summary>
public static uint GetCRC32(byte[] bytes)
{
uint value = 0xffffffff;
int len = bytes.Length;
for (int i = 0; i < len; i++)
{
value = (value >> 8) ^ _crc32Table[(value & 0xFF) ^ bytes];
}
return value ^ 0xffffffff;
}
/// <summary>
/// 获取CRC32校验值
/// </summary>
public static uint GetCRC32(string str)
{
byte[] bytes = Encoding.UTF8.GetBytes(str);
return GetCRC32(bytes);
}
}使用方法
string dataStr = "1234567890";
var crcUint = CRC32.GetCRC32(dataStr);
var crcHex = string.Format("{0:X8}", crcUint);
Console.WriteLine($"{dataStr} => CRC32 Uint: {crcUint}, Hex: {crcHex}");结果:1234567890 => CRC32 Uint: 639479525, Hex: 261DAEE5
二、OpenResty 中进行 CRC32
location /lua_crc {
content_by_lua_block
{
local str = "1234567890"
local crc32_long =ngx.crc32_long(str)
ngx.say(str .. " => CRC32 long: " .. crc32_long, "</br>")
}
}结果:1234567890 => CRC32 long: 639479525
C# 和 OpenResty 中进行 CRC32 的结果是一致的。
来源:https://www.cnblogs.com/anjou/archive/2023/07/18/crc32.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]