首页 > 原创文章 > 软件开发 > 查看文章

签名算法的MD5/RSA/SHA1/SHA256/SHA512是什么?还有哪些?

所属分类:软件开发 来源: 丁老师原创 更新时间:2026-10-09 08:48 浏览: 96 IP属地: 深圳

我们在从事软件开发过程中,经常会遇到使用签名算法,比如在线支付、API接口调用、数据推送、报文校验、身份授权等场景,每一个过程都需要进行签名,原理是请求的数据在发送数据的同时,对数据根据算法进行签名,然后服务端接收数据时,除了校验基本数据以外,首要的就是校验签名是否正确,只有通过验证的签名数据才可以进行交互,不然就是非法操作。

签名算法有很多种加密方式,比如MD5、RSA、SHA1、SHA256、SHA512等,他们都和密码有关,但作用并不相同,他们有的负责生成消息摘要,有的用于数字签名,有的则可以用于加密,今天丁老师就来讲一下,这些加密方式各有什么含义,如何使用,以及优劣对比。

前言:哈希、加密、数字签名不是一回事
在对每个加密方式介绍之前,我们需要先了解三个名词,分别是哈希、加密、数字签名。

哈希
就是我们平时说的哈希值(Hash),哈希算法会把任意长度的数据转换成固定长度的摘要。比如,同一段内容通过SHA-256计算,会得到固定长度的哈希值。哈希值一般是用于校验内容是否发生变化,它本身不能加密,也没有不能逆向查看原文(不能拿密钥把原文解回来),常被用作前端提交数据和服务端的数据比对校验。

加密算法
加密算法是对内容进行加密,用于保护内容,让没有对应密钥的人无法读取查看。加密算法和哈希的不同是在解密后可以还原原文内容。

数字签名
数字签名是用于验证消息的来源和数据的完整性,一般由发送方使用私钥签名,接收方使用对应公钥验证签名。这个数字签名并不是说加密,而是其他人仍然可能读到原始消息,只不过对于服务端来说,可以检查消息是否被篡改,以及签名是否对应那把公钥。

对比:一张表看懂

算法介绍现状适用场景
MD5128位哈希,输出32位十六进制内容已不安全,存在碰撞攻击,不能用于数字签名、证书、密码存储适合非安全场景的文件校验、去重、缓存的key键
SHA1160位哈希,输出40位十六进制内容被攻破,2017年被Googledd的SHAttered实现真实碰撞不应再用于安全场景,仅见于老旧系统的兼容处理
SHA256256位哈希,输出64位十六进制内容目前主流的安全选择用于SSL/TLS证书、数字签名、文件校验、区块链、API签名等
SHA512512位哈希,输出128位十六进制内容输出内容更长的安全方案64位系统上性能可能优于SHA256,适合高安全或大文件场景
RSA非对称加密/签名算法,分公钥和私钥目前也是普遍解决方案用于加密小数据、交换对称密钥、数字签名、SSL/TLS证书;推荐大于2048位的密钥长度

开发时怎么选择
在进行软件程序开发时,主要根据使用场景和用途进行选择:

新接口签名
最好是使用要对接的第三方平台指定的签名方案,如果是你自行设计的RSA签名方案,建议使用RSA-PSS与SHA-256。

接口双方共享一个密钥
如果协议支持,可使用HMAC-SHA256。

指定MD5或SHA-1
最好不要擅自修改已存在的算法,可以先确认平台协议和是否有替代升级方案,往往旧系统的算法在新系统、新运行环境下很难做到兼容。

密码存储
不要直接用MD5、SHA-1、SHA-256或SHA-512对密码做一次哈希,可以使用专门的密码哈希方案,例如Argon2id、bcrypt或PBKDF2。

文件校验
如果是需要对文件的完整性和真实性校验,为了防止恶意伪造,可以使用SHA-256等现代哈希算法,并且要对来路进行判断,确保对比用的数据摘要来自可信渠道。

还有哪些签名算法
除了上述介绍的签名算法,这些都属于RSA系列,现在还有诸如ECDSA、EdDSA、DSA、SM2、Schnorr等算法。

ECDSA
椭圆曲线数字签名算法,如ES256、ES384、ES512等,该算法的密钥短、性能好,目前广泛用于区块链、SSL/TLS、JWT等通信场景。

EdDSA/Ed25519
现代椭圆曲线签名算法,不依赖随机数质量,是确定性签名,抗侧信道攻击能力强。在SSH、现代协议中越来越常用。

DSA
早期的数字签名标准,现在已经基本被ECDSA/EdDSA取代,不建议新项目使用。

SM2
国产国密算法组合,如SM3withSM2,在国内公共系统、政务、金融、电子认证等场景大范围常用。

Schnorr
结构简洁的签名算法,比特币Taproot在2021年的升级中已正式引入使用。

全文总结
本文旨在介绍了MD5、RSA、SHA1、SHA256、SHA512等加密和签名算法的概念以及使用场景,其中,MD5、SHA-1、SHA-256、SHA-512 属于哈希算法,而RSA则是公钥密码算法,可用于签名或加密。HMAC-SHA256是基于共享密钥的消息认证方案。这些算法不能简单地放在一起比较谁更强、谁更好,而要先看具体用途,根据不同的使用场景选择不同的方案。

如果你在开发系统时需要设计签名认证,却不知道该使用那种算法,最好不要再使用MD5或SHA-1了,这种已经是过时且不安全的方案。而在与第三方接口对接时,则要根据对方文档,使用对方文章要求的哈希算法和签名方案、参数格式和编码方式,如果遇到验签失败,应先核算法签名的生成方式、参数,而不是反复更换算法。

简单的说,哈希负责判断数据有没有被改,而RSA/ECDSA/EdDSA这些算法负责是数据谁签的、能不能校验真伪。目前主流的算法是SHA-256/SHA-512搭配RSA、ECDSA或Ed25519。如果你在开发程序时也涉及使用签名算法,或是在日常工作中遇到了校验和对接的问题,欢迎联系丁老师进行交流和咨询!

相关文章

Python中md5转16进制的方法

在Python中,如果要把md5值,转换为16进制,可以使用hashlib库的hexdigest方法。具体代码为:from hashlib import md5 secret = '123456789' print(md...

uQRCode生成二维码出现Failed t...

有同学咨询,在开发APP和小程序时,使用uQRCode来生成二维码,之前用着好好的,功能一切正常,但是突然某个时刻不能用了,生成时报错://小程序端错误信息 [渲染层错误] [Component] <canvas : Failed...

Python3.12提示windows No...

在使用python3.12时突然遇到提示windows No module named distutils,研究了一下,把解决办法分享出来。1.安装 setuptools,它现在也提供 distutils;2.从第三方源(如系统软件包)...

Mui的toast修改位置居中

mui的toast默认是在底部的,并且没有参数设置位置,经过研究发现可以通过修改css的方式设置位置,具体方法如下:1.mui toast设置type为divmui.toast('hello', { type: '...

推荐文章

微信小程序开发生成普通二维码打开小程序的方法

在开发微信小程序的过程中,生成的是带有logo的小程序二维码,并且这个二维码不是通用的二维码,而是只能用微信打开的专属二维码,如图:遇到这样一个需求,生成的二维码要方形的通用二维码,并且不能带有小程序的logo。这种该怎么实现呢?经过查询,...

微信小程序和APP有什么区别?到底该做哪个?

经常有新客户咨询丁老师,微信小程序和APP有什么区别呢?一般情况下来说应该做哪个?今天丁老师就这个问题做一下介绍。微信小程序和APP的区别微信小程序微信小程序微信平台运行,无需下载安装,用户通过微信搜索、扫码或者朋友分享就能直接使用,用完即...

CSS常用字体及网页引用方式

1.字体列表及引用链接鸿蒙字体 - B 站400 字重 CSS://s1.hdslb.com/bfs/static/jinkela/long/font/regular.css 500 字重 CSS://s1.hdslb.com/bfs/st...

抖音小程序开发的流程是什么?

开发抖音小程序是一个涉及多个步骤的过程,需要准备相应的资料和工具。以下是开发抖音小程序需要准备的资料和步骤:1. 入驻抖音开发平台:首先,你需要在抖音开放平台注册一个开发者账号,并完成主体认证和对公认证。如果未完成认证,你可以在沙盒工具中创...