惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
罗磊的独立博客
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
D
DataBreaches.Net
博客园 - 叶小钗
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
阮一峰的网络日志
阮一峰的网络日志
B
Blog
V
Visual Studio Blog
雷峰网
雷峰网
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 大豆男生

Linq分组后,再对分组后的每组数据进行排序,获取每组的第一条记录 WebClient 指定安全协议(Tls1.1,Tls1.2,Tls1.3) .Net Core 中的 MurmurHash VS2019 .Net Core 3.0 Web 项目启用动态编译 IIS 上部署 ASP.NET Core 应用程序 IIS (安装SSL证书后) 实现 HTTP 自动跳转到 HTTPS 使用浏览器自定义协议启动本地程序(.EXE文件) 再谈 C# 对象二进制序列化,序列化并进行 AES 加密 腾讯防水墙(滑动验证码)的简单使用 https://007.qq.com C# 使用 PerformanceCounter 获取 CPU 和 硬盘的使用率 .Net 控制台中文(简体/繁体)乱码问题 .Net Core 使用 System.Drawing.Common 部署到CentOS上遇到的问题 .Net Core 读取配置文件 appsettings.json JavaScript 获取按键,并屏蔽系统 Window 事件 frp 初探 nginx 禁止未绑定的域名访问 .NET MVC JSON JavaScriptSerializer 字符串的长度超过 maxJsonLength 值问题的解决 async,await,Task 的一些用法 Newtonsoft.Json(Json.net) 的使用
C# 和 OpenResty 中进行 CRC32
大豆男生 · 2023-07-18 · via 博客园 - 大豆男生

一、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 的结果是一致的。