数字签名算法

article/2025/9/18 17:29:40

数字签名算法主要包含RSA、DSA、ECDSA三种算法

1. 它的消息传递操作是:

  • 由消息发送方构建密匙对,
  • 由消息发送的一方公布公钥至消息接收方,
  • 消息发送方对消息用私钥做签名处理
  • 消息接收方用公钥对消息做验证

2. RSA签名算法主要分为MD系列和SHA系列。具体实现如下:
在这里插入图片描述

3. RSA的数字签名代码实现:
DSA签名实现类似,ECDSA实现相比前两者在密匙对成功的方式上存在差别。

import org.apache.commons.codec.binary.Base64;import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;public class RSASignature {private static final String KEY_ALGORITHM="RSA";private static final String SIGNATURE_ALGORITHM="MD5withRSA";private static final String PUBLIC_KEY="RSAPublicKey";private static final String PRIVATE_KEY="RSAPrivateKey";/*** RSA密匙长度,默认是1024位,密匙长度必须是在64的倍数* 范围是512--65536之间**/private static final int KEY_SIZE = 512;public static void main(String[] args) throws Exception {String str = "hello vison";Map<String, Object> map = initKey();byte[] privateKey = getPrivateKey(map);//签名byte[] signData = sign(str.getBytes(), privateKey);System.out.println("signData: " + Base64.encodeBase64(signData));//校验byte[] pulicKey = getPulicKey(map);boolean status = verify(str.getBytes(), pulicKey, signData);System.out.println("verify result: " + status);}/**** @param data 待校验的数据* @param key 公钥* @param sign 数据签名* @return boolean 校验成功返回true,否则返回false* @throws Exception*/public static boolean verify(byte[] data,byte[] key,byte[] sign)throws Exception{//获取公钥X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);//校验数据Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initVerify(publicKey);signature.update(data);return signature.verify(sign);}/*** 私钥签名* @param data 待签名数据* @param key 私钥* @return byte[] 加密数据* @throws Exception*/public static byte[] sign(byte[] data,byte[] key) throws Exception {//获取私钥PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);//签名Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initSign(privateKey);signature.update(data);return signature.sign();}/*** 获取私钥* @param keyMap* @return*/public static byte[] getPrivateKey(Map<String,Object> keyMap){Key key = (Key) keyMap.get(PRIVATE_KEY);return key.getEncoded();}/*** 获取公钥* @param keyMap* @return*/public static byte[] getPulicKey(Map<String,Object> keyMap){Key key = (Key) keyMap.get(PUBLIC_KEY);return key.getEncoded();}/*** 初始化密匙对* @return Map 密钥map* @throws Exception*/public static Map<String,Object> initKey() throws Exception {//实例化密钥对生成器KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(KEY_ALGORITHM);//初始化keyPairGenerator.initialize(KEY_SIZE);//生成密匙对KeyPair keyPair = keyPairGenerator.genKeyPair();//私钥RSAPrivateKey privateKey = (RSAPrivateKey)keyPair.getPrivate();//公钥RSAPublicKey publicKey = (RSAPublicKey)keyPair.getPublic();//封装密钥HashMap<String, Object> map = new HashMap<>(2);map.put(PUBLIC_KEY,publicKey);map.put(PRIVATE_KEY,privateKey);return map;}
}

http://chatgpt.dhexx.cn/article/i26VWpq8.shtml

相关文章

数字签名的应用实例

一 安全信息公告 一些信息安全方面的组织会在其网站上发布一些关于安全漏洞的警告&#xff0c;那么这些警告信息是否真的是该组织发布的呢&#xff1f;我们如何确认发布这些信息的网站没有被第三方篡改呢&#xff1f; 在这样的情况下&#xff0c;就可以使用数字签名&#xff…

openssl数字签名

实验步骤 1. 创建明文文档plain.txt&#xff0c;写入内容。 2. &#xff08;打开bin目录下的exe文件运行&#xff09;计算plain.txt的哈希值&#xff0c;输出到文件digest.txt。 注意这个地方是sha1 是数字1而不是字母L 3. 利用RSA算法对摘要进行签名。 &#xff08;1&#…

RSA数字签名

目录 利用RSA-Tool加密消息利用RSA算法实现对称密钥的安全分配利用RSA算法生成数字签名 利用RSA-Tool加密消息 1&#xff0e;运行RSA-Tool&#xff0c;点击Start按钮&#xff0c;滑动鼠标生成一个随机数。点击Generate生成一对大质数p、q及Npq。 2&#xff0e;自己选定一个可…

密码技术-数字签名

一、数字签名 用私钥生成数字签名&#xff0c;用公钥验证签名 数字签名的方法 ① 直接对消息签名&#xff08;很少用这个&#xff09; &#xff08;1&#xff09;Alice 用自己的私钥对消息进行加密 &#xff08;2&#xff09;Alice 将消息和签名发送给 Bob &#xff08;3&…

总结数字签名实现身份验证

消息篡改和不可抵赖性 TCP协议确保数据能够正确发送到通信双方&#xff0c;加上数据加密算法保证数据安全传输&#xff0c;但是在HTTP应用中通信双方通常不清楚发送方的身份&#xff0c;尤其在客户端服务器通信下&#xff0c;通常一个服务器会处理多个客户端连接&#xff0c;结…

rsa签名算法c语言,数字签名算法rsa

数字签名算法消息传递模型 由消息发送方构建密钥对,这里由甲方完成。 由消息发送方公布公钥至消息接收方,这里由甲方将公钥公布给乙方。 注意如加密算法区别,这里甲方使用私钥对数据签名,数据与签名形成一则消息发送给乙方,私钥仅用于签名,公钥仅用于验证。 RSA RSA数字签…

数字签名原理简述

本文结合下面两个问题来讲解数字签名的基本原理。结合图片希望能给大家一个清晰简单明了的分析和讲解。 1. 问题描述: (1)用户A向远方的用户B发送一个消息,用户B如何确认所收到的消息在传输的过程中没被篡改过? (2)用户B收到了消息之后,如何防止A随之否认这个消息是…

密码学系列之七:数字签名

数字签名 1. 概述1.1 基本概念1.2 签名原理1.2.1 形式化定义1.2.2 签名过程 2 基于RSA的签名方案2.1 实现过程2.2 安全性分析 3 基于离散对数的签名方案3.1 ElGamal签名体制3.1.1 实现过程3.1.2 安全性分析 3.2 Schnorr签名体制3.2.1 实现过程3.2.2 安全性分析 3.3 DSA签名体制…

数字签名算法类别及用途

0x01 数字签名算法的类别 数字签名&#xff08;digital signature&#xff09;是一种电子签名&#xff0c;也可以表示为一种数学算法&#xff0c;通常用于验证消息&#xff08;例如&#xff0c;电子邮件、信用卡交易或数字文档&#xff09;的真实性和完整性。 在“数字签名论述…

数字签名-原理

数字签名 1. 从消息认证到数字签名1.1. 消息认证码的局限性1.2. 通过数字签名解决问题 2. 签名的生成和验证3. 数字签名的方法3.1 签名步骤3.2 过程图解 4. 数字签名无法解决的问题 “数字签名 — 消息到底是谁写的” 数字签名是一种将相当于现实世界中的盖章、签字的功能在计算…

什么是数字签名?

数字签名 数字签名 数字签名一、介绍二、功能三、流程四、数字证书 一、介绍 数字签名&#xff08;又称公钥数字签名&#xff09;是只有信息的发送者才能产生的别人无法伪造的一段数字串&#xff0c;这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名通…

一文彻底搞懂加密、数字签名和数字证书,看不懂你打我!

前言 这本是 2020 年一个平平无奇的周末&#xff0c;小北在家里刷着 B 站&#xff0c;看着喜欢的 up 主视频。 在一旁玩手机的女朋友突然问”你知道数字证书是来干啥的不&#xff0c;为啥浏览器提示证书不可信&#xff1f;” 你要说这个&#xff0c;那我可来劲了&#xff0c…

cisco 路由器 无线配置

配置环境&#xff1a;Cisco Packet Tracer 6.0 AP设备型号&#xff1a;1841 PC设备&#xff1a;Linksys-WPC300N模块的虚拟pc 第一步&#xff1a;配置接口ip R3(config)#interface Dot11Radio0/1/0 R3(config-if)#ip address 172.16.10.1 255.255.255.0 第二步&#xff1a;配置…

实验一 CISCO路由器的基本配置

要求: 1. 初始化配置&#xff1b; 2. 设置接口IP地址&#xff1b; &#xff08; F0/0 S1/0 &#xff09; 3. 测试&#xff1b; ( ping 、 telnet ) 4. 设置密码&#xff1b; &#xff08; console口、VTY接口和特权 &#xff09; 5. 查看。 &…

CISCO路由器基础配置和静态路由配置

学习Cisco的基础网络配置下载可以用Cisco公司开发的模拟器&#xff1a;Cisco packet tracer。本文的配置也都是用此模拟器配置的。 路由器 路由器的功能主要有以下几点&#xff1a; 1.实现网络互连&#xff0c;路由器支持各种局域网和广域网接口&#xff0c;主要用于互连局域…

cisco交换机配置方法

PS&#xff1a; 1.如代码能缩写尽量缩写节省时间 命令唯一才可以使用缩写方式 比如&#xff1a;config terminal 缩写为 conf t 即可 2.查看配置信息&#xff0c;只能在特权模式下查看 3.如果代码只记得前几位&#xff0c;直接按tab键补全&#xff0c;或者?查找一下 4…

一、思科路由器的基本配置

实验项目&#xff1a;路由器的基本配置 实验器材&#xff1a;Router2621XM一台、PC两台、交叉线两根。 实验目的&#xff1a;学习思科路由器的直连路由配置。 实验拓扑&#xff1a; 实验步骤&#xff1a; PC的配置 1.PC0配置IP、网关 IP&#xff1a;192.168.6.2 网关&am…

Cisco路由器配置命令

伟人对我毫无意义&#xff0c;我只欣赏自己理想中的明星。——尼采《善恶的彼岸》 Cisco工作模式 思科的工作模式有四种 用户模式&#xff1a;这一级别权限很低&#xff0c;只能查看路由器的基本状态&#xff0c;无法进行设置。 一般是Router> 特权模式&#xff1a;这一…

Cisco 路由器SSH配置

SSH1又分为1.3和 1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输&#xff0c;而对称加密算法的密钥是通过非对称加密算法&#xff08;RSA&#xff09;来完成交换的。SSH1使用循环冗余校验码&#xff08;CRC&#xff09;来保证数据的完整性&…

Cisco 路由器配置管理

大多数网络中断的最常见原因是错误的配置更改。对网络设备配置的每一次更改都伴随着造成网络中断、安全问题甚至性能下降的风险。计划外更改使网络容易受到意外中断的影响。 Network Configuration Manager 网络更改和配置管理 &#xff08;NCCM&#xff09;解决方案&#xff…