|
一、C# 进行 CRC32
- public class CRC32
- {
- private static readonly uint[] _crc32Table;
- static CRC32()
- {
- uint crc;
- _crc32Table = new uint[256];
- 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[i] = 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[i]];
- }
- 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】 我们会及时删除侵权内容,谢谢合作! |
|