当前位置: 首页 > news >正文

在 Blazor WASM 中手撸一个.NET MD5类

最近.net8 blazor auto大火, 我也玩了一下,发现ssr能用的代码 MD5 类在wasm是没法用的. 于是搜索了一下互联网,找到了一份代码,分享给大家.

我找到的帖子作者原话: 代码不是我的,但我确实稍微修改了它以使其与 System.Security.Cryptography.MD5 类更加一致。

public static class MD5
{public static byte[] ComputeHash(byte[] input){uint num = 1732584193u;uint num2 = 4023233417u;uint num3 = 2562383102u;uint num4 = 271733878u;int num5 = (56 - (input.Length + 1) % 64) % 64;byte[] array = new byte[input.Length + 1 + num5 + 8];Array.Copy(input, array, input.Length);array[input.Length] = 128;Array.Copy(BitConverter.GetBytes(input.Length * 8), 0, array, array.Length - 8, 4);for (int i = 0; i < array.Length / 64; i++){uint[] array2 = new uint[16];for (int j = 0; j < 16; j++){array2[j] = BitConverter.ToUInt32(array, i * 64 + j * 4);}uint num6 = num;uint num7 = num2;uint num8 = num3;uint num9 = num4;uint num10 = 0u;uint num11 = 0u;uint num12 = 0u;while (true){switch (num12){case 0u:case 1u:case 2u:case 3u:case 4u:case 5u:case 6u:case 7u:case 8u:case 9u:case 10u:case 11u:case 12u:case 13u:case 14u:case 15u:num10 = num7 & num8 | ~num7 & num9;num11 = num12;goto IL_0138;case 16u:case 17u:case 18u:case 19u:case 20u:case 21u:case 22u:case 23u:case 24u:case 25u:case 26u:case 27u:case 28u:case 29u:case 30u:case 31u:case 32u:case 33u:case 34u:case 35u:case 36u:case 37u:case 38u:case 39u:case 40u:case 41u:case 42u:case 43u:case 44u:case 45u:case 46u:case 47u:case 48u:case 49u:case 50u:case 51u:case 52u:case 53u:case 54u:case 55u:case 56u:case 57u:case 58u:case 59u:case 60u:case 61u:case 62u:case 63u:if (num12 >= 16 && num12 <= 31){num10 = num9 & num7 | ~num9 & num8;num11 = (5 * num12 + 1) % 16u;}else if (num12 >= 32 && num12 <= 47){num10 = num7 ^ num8 ^ num9;num11 = (3 * num12 + 5) % 16u;}else if (num12 >= 48){num10 = num8 ^ (num7 | ~num9);num11 = 7 * num12 % 16u;}goto IL_0138;}break;IL_0138:uint num13 = num9;num9 = num8;num8 = num7;num7 += leftRotate(num6 + num10 + K[num12] + array2[num11], s[num12]);num6 = num13;num12++;}num += num6;num2 += num7;num3 += num8;num4 += num9;}var hashBytes = new byte[16];BitConverter.GetBytes(num).CopyTo(hashBytes, 0);BitConverter.GetBytes(num2).CopyTo(hashBytes, 4);BitConverter.GetBytes(num3).CopyTo(hashBytes, 8);BitConverter.GetBytes(num4).CopyTo(hashBytes, 12);return hashBytes;}public static string ComputeHashString(byte[] input) => string.Join("", ComputeHash(input).Select(o => o.ToString("x2")));private static int[] s = new int[64]{7, 12, 17, 22, 7, 12, 17, 22, 7, 12,17, 22, 7, 12, 17, 22, 5, 9, 14, 20,5, 9, 14, 20, 5, 9, 14, 20, 5, 9,14, 20, 4, 11, 16, 23, 4, 11, 16, 23,4, 11, 16, 23, 4, 11, 16, 23, 6, 10,15, 21, 6, 10, 15, 21, 6, 10, 15, 21,6, 10, 15, 21};private static uint[] K = new uint[64]{3614090360u, 3905402710u, 606105819u, 3250441966u, 4118548399u, 1200080426u, 2821735955u, 4249261313u, 1770035416u, 2336552879u,4294925233u, 2304563134u, 1804603682u, 4254626195u, 2792965006u, 1236535329u, 4129170786u, 3225465664u, 643717713u, 3921069994u,3593408605u, 38016083u, 3634488961u, 3889429448u, 568446438u, 3275163606u, 4107603335u, 1163531501u, 2850285829u, 4243563512u,1735328473u, 2368359562u, 4294588738u, 2272392833u, 1839030562u, 4259657740u, 2763975236u, 1272893353u, 4139469664u, 3200236656u,681279174u, 3936430074u, 3572445317u, 76029189u, 3654602809u, 3873151461u, 530742520u, 3299628645u, 4096336452u, 1126891415u,2878612391u, 4237533241u, 1700485571u, 2399980690u, 4293915773u, 2240044497u, 1873313359u, 4264355552u, 2734768916u, 1309151649u,4149444226u, 3174756917u, 718787259u, 3951481745u};private static uint leftRotate(uint x, int c){return x << c | x >> 32 - c;}
}

不得不说,真香.

参考来源

https://stackoverflow.com/questions/76728300/any-net-md5-library-nuget-for-blazor-webassembly

相关文章:

在 Blazor WASM 中手撸一个.NET MD5类

最近.net8 blazor auto大火, 我也玩了一下,发现ssr能用的代码 MD5 类在wasm是没法用的. 于是搜索了一下互联网,找到了一份代码,分享给大家. 我找到的帖子作者原话: 代码不是我的&#xff0c;但我确实稍微修改了它以使其与 System.Security.Cryptography.MD5 类更加一致。 pub…...

MFC实现遍历系统进程

今天我们来枚举系统中的进程和结束系统中进程。 认识几个API 1&#xff09;CreateToolhelp32Snapshot 用于创建系统快照 HANDLE WINAPI CreateToolhelp32Snapshot( __in DWORD dwFlags, //指定快照中包含的系统内容__in DWORD th32P…...

【C语言】深入理解指针

目录 1.字符指针 2.指针数组 3.数组指针 4.数组传参与指针传参 一维数组传参 二维数组传参 一级指针传参 二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针&#xff08;了解即可&#xff09; 8.回调函数 回调函数的应用&#xff1a;库函数qsort …...

Excel——有效性、二级菜单联动

一、录入规范数据 1.手动输入序列录入有效性信息 选择需要录入有效性的所有单元格 选择【数据】——【有效性】——【有效性】 在【允许】输入的值之间选择【序列】 在【序列】输入框中输入想要选择的值&#xff0c;中间用逗号&#xff08;必须是英文逗号&#xff09;隔开 。…...

计算机网络总结

1. 网络分层 网络上进行协议分层的好处 ①分层之后层次之间的耦合程度比较低&#xff0c;上层协议不必了解下层的细节&#xff0c;下层也不必了解上层的细节&#xff1b; ②方便的对某一层的协议进行替换&#xff1b; 真实网络的协议分层 OSI 七层网络模型&#xff08;教科书&…...

初识文件包含漏洞

目录 什么是文件包含漏洞&#xff1f; 文件包含的环境要求 常见的文件包含函数 PHP伪协议 file://协议 php://协议 php://filter php://input zip://、bzip2://、zlib://协议 zip:// bzip2:// zlib:// data://协议 文件包含漏洞演示 案例1&#xff1a;php://inp…...

AR特效自研AI算法技术解决方案

在当今这个高速发展的数字化时代&#xff0c;增强现实&#xff08;AR&#xff09;技术已经成为企业创新和市场竞争的重要手段。美摄科技凭借对AI技术的深厚积累&#xff0c;为企业提供了一套创新的AR特效自研AI算法技术解决方案&#xff0c;旨在满足企业在AR领域的多元化需求。…...

牛客2024年除夕娱乐赛(题解)

比赛地址 : 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A 看题面然后猜!!! #include<bits/stdc.h> using namespace std; int main(){cout << "原神启动" << endl; } B 也是看题面然后猜 : #include<bits/stdc.…...

5 scala的函数式编程简介

与Java一样&#xff0c;Scala 也是使用 Lambda 表达式实现函数式变成的。 1 遍历 除了使用 for 可以对数组、List、Set 进行遍历外&#xff0c;也可以使用 foreach 函数式编程进行遍历&#xff0c;使代码更为简洁。 foreach 的方法签名为&#xff1a; foreach(f: (A) > …...

陪护系统|陪护小程序提升长者护理服务质量的关键

在如今逐渐老龄化的社会中&#xff0c;老年人对更好的护理服务需求不断增加。科技的进步使得陪护小程序系统源码成为提供优质服务的重要途径之一。本文将从运营角度探讨如何优化陪护小程序系统源码&#xff0c;提升长者护理服务的质量。 首先&#xff0c;我们需要对软件的设计和…...

C++算法之双指针、BFS和图论

一、双指针 1.AcWing 1238.日志统计 分析思路 前一区间和后一区间有大部分是存在重复的 我们要做的就是利用这部分 来缩短我们查询的时间 并且在使用双指针时要注意对所有的博客记录按时间从小到大先排好顺序 因为在有序的区间内才能使用双指针记录两个区间相差 相当于把一个…...

【大厂AI课学习笔记】1.5 AI技术领域(3)自然语言处理

今天来梳理自然语言处理的相关内容。 自然语言处理&#xff1a;定义、关键技术、技术发展、应用场景与商业化成功 一、自然语言处理的定义 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;领域的一个重要分支&#xff0c;它研究的是如何让计算…...

【数字电子技术课程设计】多功能数字电子钟的设计

目录 摘要 1 设计任务要求 2 设计方案及论证 2.1 任务分析 2.1.1 晶体振荡器电路 2.1.2 分频器电路 2.1.3 时间计数器电路 2.1.4 译码驱动电路 2.1.5 校时电路 2.1.6 整点报时/闹钟电路 2.2 方案比较 2.3 系统结构设计 2.4 具体电路设计 3 电路仿真测试及结…...

【新书推荐】7.3 for语句

本节必须掌握的知识点&#xff1a; 示例二十四 代码分析 汇编解析 for循环嵌套语句 示例二十五 7.3.1 示例二十四 ■for语句语法形式&#xff1a; for(表达式1;表达式2;表达式3) { 语句块; } ●语法解析&#xff1a; 第一步&#xff1a;执行表达式1&#xff0c;表达式1…...

爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测

目录 背影 极限学习机 爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:爬山算法优化遗传算法优化极限学习机的多分类预测,p-ga-elm多分类预测(代码完整,数据)资源-CSDN文库 https://d…...

挑战杯 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…...

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…...

PHP、Python、Java 和 Go语言对比

PHP、Python、Java 和 Go 都是流行的编程语言&#xff0c;每种语言都有其独特的优势和适用场景。下面是对这些语言的一些基本对比&#xff1a; 一&#xff1a;PHP 适用场景&#xff1a;主要用于Web开发&#xff0c;特别是服务器端脚本。 特点&#xff1a;语法简单易懂&#…...

算法题目题单+题解——图论

简介 本文为自己做的一部分图论题目&#xff0c;作为题单列出&#xff0c;持续更新。 题单由题目链接和题解两部分组成&#xff0c;题解部分提供简洁题意&#xff0c;代码仓库&#xff1a;Kaiser-Yang/OJProblems。 对于同一个一级标题下的题目&#xff0c;题目难度尽可能做…...

车载测试中:如何处理 bug

一&#xff1a;Jira 提交 bug 包含那些内容 二&#xff1a;如何处理现上 bug 三&#xff1a;车载相关的 bug 如何定位 四&#xff1a;遇到 bug &#xff0c;复现不出来怎么办 五&#xff1a;bug 的处理流程 一&#xff1a;Jira 提交 bug 包含那些内容二&#xff1a;如何处理现上…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...