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

C# | 上位机开发新手指南(六)摘要算法

C# | 上位机开发新手指南(六)摘要算法

文章目录

  • C# | 上位机开发新手指南(六)摘要算法
    • 前言
    • 常见摘要算法源码
      • MD5算法
      • SHA-1算法
      • SHA-256算法
      • SHA-512算法
      • BLAKE2算法
      • RIPEMD算法
      • Whirlpool算法

前言

你知道摘要算法么?它在保障数据安全方面非常有用!

它能够将任意长度的数据转换成固定长度的消息摘要,从而确保数据的完整性和可靠性。比如说,我们下载软件的时候,就可以用摘要算法来检验软件是否被篡改,保障我们的电脑安全。

那这个算法的工作原理是怎样的呢?大致就是通过一系列复杂的计算,将原始数据转换为一个固定长度的摘要信息。而且无论输入的数据大小,输出的摘要信息长度都是一样的。

那么摘要算法有什么用处呢?比如数字签名,确保数据的来源和内容没有被篡改。还有密码学等领域的应用,可以说是非常厉害了!

那常见的摘要算法有哪些呢?比较常见的有MD5、SHA-1、SHA-2、SHA-3、BLAKE2、RIPEMD、Whirlpool和Keccak等。它们各有不同的优缺点和适用场景,我们需要根据实际情况来选择使用哦。

常见摘要算法源码

MD5算法

MD5是一种广泛使用的哈希算法,将任意长度的数据计算为128位的哈希值。尽管它被广泛使用,但是因为它已经被证明存在安全漏洞,现在已经不再被推荐使用。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 MD5 算法生成摘要string md5Hash = GetMd5Hash(input);Console.WriteLine($"MD5 hash of {input}: {md5Hash}");}// 使用 MD5 算法生成摘要static string GetMd5Hash(string input){using (MD5 md5 = MD5.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = md5.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 MD5 类。在方法中,先将字符串转换为字节数组,然后调用 MD5 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-1算法

SHA-1是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为160位的哈希值。目前,SHA-1算法也已经被证明存在安全漏洞,现在不再被推荐使用。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 SHA-1 算法生成摘要string sha1Hash = GetSha1Hash(input);Console.WriteLine($"SHA-1 hash of {input}: {sha1Hash}");}// 使用 SHA-1 算法生成摘要static string GetSha1Hash(string input){using (SHA1 sha1 = SHA1.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = sha1.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA1 类。在方法中,先将字符串转换为字节数组,然后调用 SHA1 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-256算法

SHA-256是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为256位的哈希值。它是SHA-2算法族中的一员,比SHA-1更安全。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 SHA-256 算法生成摘要string sha256Hash = GetSha256Hash(input);Console.WriteLine($"SHA-256 hash of {input}: {sha256Hash}");}// 使用 SHA-256 算法生成摘要static string GetSha256Hash(string input){using (SHA256 sha256 = SHA256.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = sha256.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA256 类。在方法中,先将字符串转换为字节数组,然后调用 SHA256 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

SHA-512算法

SHA-512是一种用于计算数据哈希值的加密算法,将任意长度的数据计算为512位的哈希值。它是SHA-2算法族中的一员,比SHA-256更安全。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 SHA-512 算法生成摘要string sha512Hash = GetSha512Hash(input);Console.WriteLine($"SHA-512 hash of {input}: {sha512Hash}");}// 使用 SHA-512 算法生成摘要static string GetSha512Hash(string input){using (SHA512 sha512 = SHA512.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = sha512.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 SHA512 类。在方法中,先将字符串转换为字节数组,然后调用 SHA512 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

BLAKE2算法

BLAKE2是BLAKE算法的改进版,是一种快速、安全的哈希函数,支持多种哈希长度,其中BLAKE2b和BLAKE2s分别支持512位和256位哈希值。它在安全性和性能方面都表现优异,被广泛应用于密码学和安全领域。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 BLAKE2 算法生成摘要string blake2bHash = GetBlake2bHash(input);Console.WriteLine($"BLAKE2b hash of {input}: {blake2bHash}");string blake2sHash = GetBlake2sHash(input);Console.WriteLine($"BLAKE2s hash of {input}: {blake2sHash}");}// 使用 BLAKE2b 算法生成摘要static string GetBlake2bHash(string input){using (BLAKE2b blake2b = BLAKE2b.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = blake2b.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}// 使用 BLAKE2s 算法生成摘要static string GetBlake2sHash(string input){using (BLAKE2s blake2s = BLAKE2s.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = blake2s.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 BLAKE2b 和 BLAKE2s 类。在方法中,先将字符串转换为字节数组,然后调用 BLAKE2 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

RIPEMD算法

RIPEMD是一种比较老的哈希算法,支持多种哈希长度,其中RIPEMD-160和RIPEMD-256分别支持160位和256位哈希值。它在安全性方面比MD5强,但性能较慢。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 RIPEMD-160 算法生成摘要string ripemd160Hash = GetRipemd160Hash(input);Console.WriteLine($"RIPEMD-160 hash of {input}: {ripemd160Hash}");// 使用 RIPEMD-256 算法生成摘要string ripemd256Hash = GetRipemd256Hash(input);Console.WriteLine($"RIPEMD-256 hash of {input}: {ripemd256Hash}");}// 使用 RIPEMD-160 算法生成摘要static string GetRipemd160Hash(string input){using (RIPEMD160 ripemd160 = RIPEMD160.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = ripemd160.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}// 使用 RIPEMD-256 算法生成摘要static string GetRipemd256Hash(string input){using (RIPEMD256 ripemd256 = RIPEMD256.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = ripemd256.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 RIPEMD160 和 RIPEMD256 类。在方法中,先将字符串转换为字节数组,然后调用 RIPEMD 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

Whirlpool算法

Whirlpool是一种强度很高的哈希算法,支持512位哈希值。它具有高度的安全性和抗碰撞性,并且被广泛应用于数字签名、身份验证和数据完整性验证等领域。

示例代码:

using System;
using System.Security.Cryptography;
using System.Text;class Program
{static void Main(string[] args){string input = "Hello, world!";// 使用 Whirlpool 算法生成摘要string whirlpoolHash = GetWhirlpoolHash(input);Console.WriteLine($"Whirlpool hash of {input}: {whirlpoolHash}");}// 使用 Whirlpool 算法生成摘要static string GetWhirlpoolHash(string input){using (Whirlpool whirlpool = Whirlpool.Create()){// 将输入字符串转换为字节数组byte[] inputBytes = Encoding.UTF8.GetBytes(input);// 计算哈希值byte[] hashBytes = whirlpool.ComputeHash(inputBytes);// 将哈希值转换为字符串StringBuilder builder = new StringBuilder();for (int i = 0; i < hashBytes.Length; i++){builder.Append(hashBytes[i].ToString("x2"));}return builder.ToString();}}
}

代码中使用了 System.Security.Cryptography 命名空间中的 Whirlpool 类。在方法中,先将字符串转换为字节数组,然后调用 Whirlpool 类的 ComputeHash 方法生成哈希值,最后将哈希值转换为字符串返回。

相关文章:

C# | 上位机开发新手指南(六)摘要算法

C# | 上位机开发新手指南&#xff08;六&#xff09;摘要算法 文章目录C# | 上位机开发新手指南&#xff08;六&#xff09;摘要算法前言常见摘要算法源码MD5算法SHA-1算法SHA-256算法SHA-512算法BLAKE2算法RIPEMD算法Whirlpool算法前言 你知道摘要算法么&#xff1f;它在保障…...

测试工程师:“ 这锅我不背 ” ,面对灵魂三问,如何回怼?

前言 在一个周末的早餐我被同事小周叫出去跑步&#xff0c;本想睡个懒觉&#xff0c;但是看他情绪不太稳定的样子&#xff0c;无奈艰难爬起陪他去跑步。 只见她气冲冲的对着河边大喊&#xff1a;真是冤枉啊&#xff01;!&#xff01; 原来是在工作中被莫名其妙背锅&#xff0…...

【Java闭关修炼】SpringBoot-SpringMVC概述和入门

SpringMVC概述和入门 MVC概述 实体类Bean:专门 存储业务数据 Student User业务处理Bean:指的是Service或者Dao 专门用来处理业务逻辑或者数据访问 用户通过视图层发送请求到服务器&#xff0c;在服务器中请求被Controller接受&#xff0c;Controller调用相应的MOdel层处理请求…...

pdf转换器免费版哪种好用:Aiseesoft PDF Converter Ultimate | 无损转word转Excel转PPT转图片啥都行!!!

Aiseesoft PDF Converter Ultimate 是一款优秀且高效可靠的无损电脑免费版pdf转换器软件&#xff0c;凭借卓越高识别精度的强悍OCR识别技术&#xff0c;可精准识别英文、法文、中文、德文、日文、韩文、意大利文、土耳其文等190多个国家的语言以及各种公式和编程语言&#xff0…...

革新市场营销,突破瓶颈:关键词采集和市场调查的秘密武器

近年来&#xff0c;全球新兴行业不断涌现&#xff0c;其中一些行业甚至成为了热门话题。这些新兴行业的出现&#xff0c;不仅带来了新的商机和发展机遇&#xff0c;也对传统产业带来了冲击和挑战。对于那些想要进入新兴行业的人来说&#xff0c;了解这些行业的关键词和市场情况…...

3年测试经验只会“点点点”,不会自动化即将面临公司淘汰?沉淀100天继续做测试

前段时间一个朋友跟我吐槽&#xff0c;说自己做软件测试工作已经3年了&#xff0c;可这三年自己的能力并没有得到提升&#xff0c;反而随着互联网的发展&#xff0c;自己只会“点点点”的技能即将被淘汰。说自己很苦恼了&#xff0c;想要提升一下自己&#xff0c;可不知道该如何…...

python:异常处理与文件操作(知识点详解+代码展示)

文章目录一、异常处理1、try...except语句2、finally语句二、断言1、定义2、举例例一&#xff1a;例二&#xff1a;三、文件操作1、写文件操作2、读文件操作学习目标&#xff1a;1、掌握异常处理的方法2、掌握断言的使用3、掌握打开文件、读文件和写文件的方法一、异常处理 引…...

SpringBoot 过滤器和拦截器(三十八)

我喜欢你&#xff0c;可是你却并不知道. 上一章简单介绍了SpringBoot参数验证(三十七) ,如果没有看过,请观看上一章 关于过滤器和拦截器已经讲很多了&#xff0c; 这里老蝴蝶只说一下 SpringBoot 的用法。 可以看之前的文章: https://blog.csdn.net/yjltx1234csdn/article/d…...

Memcache论文总结——Lec16

文章目录一、相关名词1.mcrouter层2.GUTTER SERVER3.mcsqueal4.remote mark二、当流量增长了如何SCALE 你的网站&#xff1f;三、背景及业务特点1.读多写少2.FB需求&#xff1a;3.之前情况四、简介五、FaceBook的架构五、Cache Policy六、In a Cluster : Latency and Load(一&a…...

父子组件传值问题

文章目录前言一、问题描述二、问题解决前言 在写毕业设计&#xff0c;涉及了一些前端Vue.js的组件传值知识并出现了相关问题&#xff0c;因此进行记录。 问题 Vue.js的使用不熟练&#xff0c;相关组件、props等掌握不清晰前端代码书写不规范 望指正&#xff01; 一、问题描述 …...

Redis大key问题

Redis大key问题 什么是big key&#xff1f; bigKey的危害&#xff1a; 大key不仅仅是占用内存而已&#xff0c;如果是仅仅内存的问题 那么扩大内存就好了。禁止大key是主要是因为你操作redis&#xff0c;比如说读/写等操作redis的时候 会有io操作&#xff0c;大key会导致io操作…...

00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了18k&#xff0c;对于工作都还没两年的我来说&#xff0c;还是比较满意的&#xff0c;毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王&#xff0c;感觉自己年轻&#xff…...

Redis第七讲 Redis存储模型详解

Redis存储模型 每次在Redis数据库中创建一个键值对时,至少会创建两个对象,一个是键对象,一个是值对象,而Redis中的每个对象都是由 redisObject 结构来表示.redisObject的结构与对象类型、内存编码、内存回收、共享对象都有关系,一个redisObject对象的大小为16字节:4bit+…...

Python 进阶指南(编程轻松进阶):十五、面向对象编程和类

原文&#xff1a;http://inventwithpython.com/beyond/chapter15.html OOP 是一种编程语言特性&#xff0c;允许你将变量和函数组合成新的数据类型&#xff0c;称为类&#xff0c;你可以从中创建对象。通过将代码组织成类&#xff0c;可以将一个整体程序分解成更容易理解和调试…...

windows下postgresql安装timescaledb

timescaledb是一个时序数据库&#xff0c;可以创建超表hypertable。它并不是一个独立的数据库&#xff0c;它依赖于postgresql&#xff0c;目前相当于postgresql的一个插件或者扩展。 要安装timescaledb&#xff0c;需要先安装postgresql。 这里安装的postgresql是12.14版本&am…...

Linux系统常用命令大全

本教程将介绍Linux系统的基本操作&#xff0c;包括文件操作、用户管理和软件安装等。 1. 文件操作 1.1 查看文件内容 使用cat命令可以查看文件的内容&#xff0c;例如&#xff1a;cat file.txt 1.2 创建新文件 使用touch命令可以创建新文件&#xff0c;例如&#xff1a;to…...

月报总结|Moonbeam 3月份大事一览

本月&#xff0c;Moonbeam在社区治理上进入了全新的阶段 — — 针对第一批生态系统Grants的Snapshot投票结果揭晓&#xff0c;链上公投已在进行中&#xff0c;社区获得了更多表达的机会与权力&#xff0c;这些项目也将为生态注入新的活力。 活动方面&#xff0c;Moonriver Ris…...

多功能料理锅语音播放芯片——NV040C

多功能料理锅就是一锅搭配多个锅盘&#xff0c;可以实现火锅、烤肉、花式煎蛋、丸子等多种烹饪功能。 多功能料理锅语音方案设计需求&#xff1a; 多功能锅本身体积有限&#xff0c;按钮比较少&#xff0c;相应功能的字体要贴按钮旁边&#xff0c;字体也是比较小的&#xff0c…...

vue23自定义svg图标组件

可参考&#xff1a; 未来必热&#xff1a;SVG Sprites技术介绍 懒人神器&#xff1a;svg-sprite-loader实现自己的Icon组件 在Vue3项目中使用svg-sprite-loader 前置知识 在页面中&#xff0c;虽然可以通过如下的方式使用img标签&#xff0c;来引入svg图标。但是&#xff0c;…...

相机雷达时间同步(基于ROS)

文章目录运行环境&#xff1a;思路&#xff1a;同步前和同步后效果对比1.1创建工作空间1.2创建功能包2.1编写源文件2.2编写头文件2.3编写可执行文件2.4配置文件3.1编译运行4.1录制时间同步后的rosbag4.2rviz可视化rosbag运行环境&#xff1a; ubuntu20.04 noetic usb_cam 速腾R…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

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

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

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...