Go语言实现单向散列函数 —— MD5消息摘要算法、SHA256与224(Go语言实现)

Golang实现哈希值计算 SHA-1(Secure Hash Algorithm 1)和 SHA-256(Secure Hash Algorithm 256)都是密码学中常用的哈希函数,用于将输入数据转换为固定长度的哈希值。这些哈希函数在安全领域和计算领域中具有重要作用,用于各种用途,如数据完整性验证、数字签名、密码存储等。 阅读详情

 MD5消息摘要算法

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

Go语言实现方式一:

package main

import (
	"fmt"
	"crypto/md5"
	"encoding/hex"
)

func main() {

	var a = []byte("i am the reader")

	hash := md5.New()
	_, err := hash.Write(a)
	if err!=nil{
		fmt.Println("hash.Write faild")
	}
	hashed := hash.Sum(nil)
	fmt.Println("a 的md5单向散列为:",hex.EncodeToString(hashed[:]))
	
	hash.Reset()
	_, err= hash.Write([]byte("hello world"))
	if err!=nil{
		fmt.Println("hash.Write faild")
	}
	hashed = hash.Sum(nil)
	fmt.Println("a 的md5单向散列为:",hex.EncodeToString(hashed[:]))
	
}

Go语言实现方式二:

package main

import (
	"fmt"
	"crypto/md5"
	"encoding/hex"
)



func main() {
	hashed := md5.Sum([]byte("i am the reader"))
	fmt.Println("a 的md5单向散列为:",hex.EncodeToString(hashed[:]))
}

其两者区别为:用过一次之后可以reset以下,然后可以重复使用,而方式二不可以。

方式一代码比较多,而方式二代码就很少。

SHA256与224

package main

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
)

func main1() {
	hash := sha256.New()
	hash.Write([]byte("i am the reader"))
	sum := hash.Sum(nil)
	fmt.Println(sum)
	fmt.Println(len(sum) * 8)
	s := hex.EncodeToString(sum)
	fmt.Println(s)
	fmt.Println(len(s) * 8)
}

//结果为:
//[84 251 192 78 28 190 247 247 180 155 4 177 16 2 249 160 236 10 217 96 213 242 65 37 24 13 212 58 232 98 129 229]
//256
//54fbc04e1cbef7f7b49b04b11002f9a0ec0ad960d5f24125180dd43ae86281e5
//512
func main2() {
	s1 := sha256.Sum256([]byte("i am the reader"))
	fmt.Println(len(s1) * 8)
	fmt.Println(s1)
	s := hex.EncodeToString(s1[:])

	fmt.Println(s)
	fmt.Println(len(s) * 8)
}
//结果为:
//256
//[84 251 192 78 28 190 247 247 180 155 4 177 16 2 249 160 236 10 217 96 213 242 65 37 24 13 212 58 232 98 129 229]
//54fbc04e1cbef7f7b49b04b11002f9a0ec0ad960d5f24125180dd43ae86281e5
//512


func main3() {
	hash := sha256.New224()
	hash.Write([]byte("i am the reader"))
	sum := hash.Sum(nil)
	fmt.Println(sum)
	fmt.Println(len(sum) * 8)
	s := hex.EncodeToString(sum)
	fmt.Println(s)
	fmt.Println(len(s) * 8)
}

//结果为:
//[249 203 73 14 85 217 122 47 50 255 162 90 1 24 181 52 4 26 201 18 73 182 159 29 205 205 201 208]
//224
//f9cb490e55d97a2f32ffa25a0118b534041ac91249b69f1dcdcdc9d0
//448

 

几种经典的Hash算法的实现(源代码) 这是几种经典的Hash算法的实现(源代码),里面源代码和文字解说都有 立即下载

相关推荐

别再瞎调了!STM32 Systick延时函数避坑指南(正点原子、野火、慧净代码对比)

本文深入解析STM32 Systick延时函数的实现差异与优化策略,对比正点原子、野火、慧净等主流方案的优缺点。针对us和ms级延时精度问题,提供避坑指南和高级优化技巧,帮助开发者根据项目需求选择最佳方案,提升嵌入式系统的定时控制精度。

weixin_28717807的博客 340

GO语言与RSA算法 —— RSA算法概念、原理、Go语言实现实例

RSA算法 加密 RSA是一种公钥密码算法,其加密可以通过公式来表示: 密文=明文^E mod N RSA的加密是求明文的E次方mod N,因此只需要知道E和N,任何人都可以完成加密运算,E和N就是RSA算法的公钥。      2.解密 解密同样也可以使用一个公式来表示: 明文=密文^D mod N D和N就充当了RSA算法的私钥 公钥密码存在的问题 公钥密码虽然解决了密钥配送的...

The_Reader的博客 889

电力电子技术进阶:从基础到实战的完整学习路径

本文系统阐述了电力电子技术从基础到实战的完整学习路径。首先解析了电力电子作为“电能魔术师”的核心作用,随后深入剖析了数学工具、电路电磁场与半导体器件三大基础支柱。文章重点讲解了DC-DC、DC-AC、AC-DC等核心变换拓扑,并探讨了从经典PID到现代模型预测控制(MPC)的控制策略。最后,分享了硬件设计、软件调试、电磁兼容(EMC)等实战经验与前沿趋势,为学习者提供了清晰的进阶指南。

weixin_29204205的博客 447

RSA算法讲解与Go语言实例

一、RSA算法概述 RSA是"非对称加密算法",非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公钥与私钥是配对的,用公钥加密的数据只有配对的私钥才能解密,反之亦然。因加解密使用两个不同的密钥,所以这种算法叫作非对称加密算法。 使用RSA加密算法流程如下: 1.消息接收方B先把公钥广播,消息发送方A保存B的公钥 2.当A需要向B发送消息时,先用B的公...

码墨 957

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1119

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 664

【密码学入门】古典加密算法-凯撒密码 Go语言实现

凯撒密码手撕

qq_22328011的博客 490

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6560

go算法题

=================================================== //**冒泡排序 func BubbleSort(arr *[5]int){ n :=len(*arr) temp := 0 for i := 0; i < n-1; i++ { for j :=i+1; j < n; j++ { ...

zhaoliang831214的专栏 1039

【WRF数据准备】气象驱动数据-ERA5再分析数据(Copernicus)

【WRF数据准备】气象驱动数据-ERA5再分析数据

WW、forever的博客 5529

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2882

Go语言加密算法

本文系统介绍了密码学中的Hash算法和加密算法。Hash算法具有单向性、输入敏感性和抗碰撞性等特点,常见算法包括MD5、SHA系列和RIPEMD等。对称加密算法使用相同密钥进行加解密,如DES、3DES和AES,具有高效性但密钥管理困难;非对称加密算法使用公钥/私钥对,如RSA和ECC,安全性更高但计算复杂。文章详细说明了各类算法的实现原理、特点和应用场景,并提供了Go语言的具体实现示例,包括密钥生成、数据加解密等核心操作。最后介绍了椭圆曲线加密(ECC)的优势和实现方法。

不愿言弃-念何的博客 549

零基础入门Simulink——基于Simulink的MIMO-OFDM系统仿真建模示例

MIMO概述MIMO技术利用多个天线进行信号发送和接收,通过空间复用来提高数据传输速率,或通过空间分集来增强信号的可靠性。OFDM概述OFDM是一种将高速率数据流分成多个低速数据流并行传输的技术,每个子载波都采用调制方式(如BPSK、QPSK),并通过IFFT/FFT变换实现串并转换。MIMO-OFDM优势结合了MIMO的空间分集增益与OFDM对抗多径效应的能力,适用于宽带无线通信系统。提供了更高的数据速率和更好的频谱效率,是现代无线通信标准(如4G LTE、5G NR等)的核心技术之一。

amy_mhd的博客 888

Go语言实现加密算法

Go语言实现加密算法 一、哈希算法 1.Hash的定义 2.流行的哈希算法 3.Hash与加密解密的区别 4.SHA256 5.核心代码 二、对称加密算法 1.概述 2.DES和TripleDES算法 3.AES加密 4.加密模式 5.填充方式 6.核心代码 三、非对称加密算法 1.发展史 2.非对称加密(Asymmetric Cryptography) 3.对称加密与非对称加密的区别 4.RSA原理 5.核心代码 四、椭圆曲线加密

xiaotai1234的博客 1176

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Go】【密码学】【Day01】对字符串进行简单加解密

package main import ( "bytes" "encoding/hex" "fmt" ) func main() { data := []byte("ReganYue") encrypt_msg := EnCrypt("123", data) fmt.Println("encrypt_msg = ", encrypt_msg) fmt.Printf("%x\n", encrypt_msg) fmt.Println(hex.EncodeToString(encrypt_ms

ReganYue's Blog 4357

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

go语言RSA加密算法(三):数字签名、验证

加密与签名的区别: 加密:公钥加密,私钥解密 签名:私钥签名,公钥验证 数字签名过程: 原文的哈希值用自己私钥签名,原文+签名给对方,对方用公钥验证签名时与原文哈希比对。 加密并签名: 原文用对方公钥加密,原文的哈希值用自己的私钥签名,密文+签名给对方,对方公钥验证签名和自己私钥解密原文的哈希值比对。

咸甜适中 1152

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

go语言之各种加密算法的使用

go语言之base64使用 base64加密算法常用于数据传输,下面看看如何使用go语言库封装好的base64算法。 直接看代码。 package main import ( "encoding/base64" "fmt" ) const base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01

喜欢吃一口烤肉的啵啵 2045

SHA1/MD5散列算法实现(C语言)

一、实验目的   通过实际编程了解MD5算法的加密和解密过程,加深对Hash算法的认识。   二、实验原理  Hash函数是将任意长的数字串转换成一个较短的定长输出数字串的函数,输出的结果称为Hash值。Hash函数具有如下特点:  (1)快速性:对于任意一个输入值x,由Hash函数H(x),计算Hash值y,即y=H(x),是非常容易的。  (2)单向性:对于任意一个输出值y,希望反向推出输入值x,使得y=H(x),是非常困难的。  (3)无碰撞性:对任意给定的数据块x,希望找到一个y,满足H.

1ance's blog 2184

golang实战-单向散列函数

一. 什么是单向散列函数 单向散列函数有多个术语变体,又称为消息摘要函数,或者哈希函数,或者杂凑函数。它主要应用在为一个输入消息输出一个对应的散列值(又称哈希值),不同的输入消息输出的散列值一般是不相同的(相同碰撞概率很小),因此可以用来检验消息的完整性。 如下在该网址下载文件时,网址就附上了每个文件对应的 sha256 哈希散列值,当我们下载完对应的文件时,在本地使用 sha256 为下载好的文件生成散列值,就可以校验在传输过程中内容是否被篡改,或者是否下载了正确的文件...

椛茶的博客 761

常用加密算法go实现

常用的加密算法,对称加密、非对称加密以及摘要算法

Sncot的博客 1719

Go语言实现md4、md5、sha256哈希算法加密

目录1. 哈希算法特点2. 常用的哈希算法3. go实现MD加密3.1 MD43.2 MD53. go实现SHA加密最后 1. 哈希算法特点 不可逆:无法从一个哈希值恢复原始数据,哈希并不加密 唯一性:对于特定的数据 只能有一个哈希 并且这个哈希是唯一的 防篡改:改变输入数据中的一个字节 导致输出一个完全不同的哈希值 2. 常用的哈希算法 MD4、MD5、hash1、sha224、sha256、sha384、sha512 性能 : md4 > md5 > sha224 > sha256

面向生活编程 3852

go语言byte切片转为string切片函数

hash := sha256.Sum256([]byte(value)) hashstr := hex.EncodeToString(hash[:])  

书山有路勤为径 4760

Go语言实现SHA256或SHA512哈希算法

问题 编写一个程序,默认情况下打印标准输入的SHA256编码,并支持通过命令行flag定制,输出SHA384或SHA512哈希算法。 代码实现

但行好事,莫问前程 2996

golang标准库-crypto/sha1,crypto/sha256,crypto/sha512(sha加密算法)

sha加密算法与MD5算法一样也是hash算法的一种,go提供了sha算法的几种,sha1,sha256,sha512,本章节一起讲解它们的使用方法 先看sha1,sha1加密后的结果为20位字节大小,转化为十六进制,最终结果就是40位。sha1和md5一样属于出现比较早的hash算法,虽然要破解,产生hash碰撞的记录依然很小,但现在已经有反向查表发和彩虹表等一些方法可以很轻松逆向查到h...

itpika的博客 1万+

sha256 加密算法

sha256 加密算法 go 调用 sha256 加密 字符串哈希值 package main import( "fmt" "crypto/sha256" "io" "log" "os" ) func main() { // 第一种调用方法 sum := sha256.Sum256([]byte("hello world\.

我不是大牛 1万+
上一篇: Go语言基础(十)—— Go语言接口
下一篇: Go语言基础(十一)—— 实现命令行参数对数据的简单查询小案例
The_Reader
博客等级 码龄10年 74粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值