用java语言写一个RSA方式的数据签名、验签,服务端和客户端双方各生成一对RSA公私钥,并交换公钥。己方私钥用于加密,对方公钥用于验签,代码实例类编写。

以下是一个使用Java编写的RSA方式的数据签名和验签的示例代码。在该示例中,服务端和客户端分别生成RSA公私钥对,并进行公钥交换。

java Copy code

import java.nio.charset.StandardCharsets;

import java.security.*;

import java.util.Base64;

public class RSASignatureExample {

public static void main(String\[\] args) {

try {

// 服务端生成RSA密钥对,用于签名

KeyPair serverKeyPair = generateKeyPair();

PublicKey serverPublicKey = serverKeyPair.getPublic();

PrivateKey serverPrivateKey = serverKeyPair.getPrivate();

// 客户端生成RSA密钥对,用于签名

KeyPair clientKeyPair = generateKeyPair();

PublicKey clientPublicKey = clientKeyPair.getPublic();

PrivateKey clientPrivateKey = clientKeyPair.getPrivate();

// 模拟服务端给客户端发送数据

String data = "Hello, Client!";

byte\[\] signature = sign(data, serverPrivateKey);

// 模拟客户端接收到数据后进行验签

boolean verified = verify(data, signature, serverPublicKey);

System.out.println("服务端验签结果:" + verified);

// 模拟客户端给服务端发送数据

String response = "Hello, Server!";

byte\[\] responseSignature = sign(response, clientPrivateKey);

// 模拟服务端接收到数据后进行验签

boolean responseVerified = verify(response, responseSignature, clientPublicKey);

System.out.println("客户端验签结果:" + responseVerified);

} catch (Exception e) {

e.printStackTrace();

}

}

// 生成RSA密钥对

public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(2048);

return keyPairGenerator.generateKeyPair();

}

// RSA签名

public static byte\[\] sign(String data, PrivateKey privateKey) throws Exception {

Signature signature = Signature.getInstance("SHA256withRSA");

signature.initSign(privateKey);

signature.update(data.getBytes(StandardCharsets.UTF_8));

return signature.sign();

}

// RSA验签

public static boolean verify(String data, byte\[\] signature, PublicKey publicKey) throws Exception {

Signature sig = Signature.getInstance("SHA256withRSA");

sig.initVerify(publicKey);

sig.update(data.getBytes(StandardCharsets.UTF_8));

return sig.verify(signature);

}

}

上述代码中,generateKeyPair方法用于生成RSA密钥对。sign方法使用私钥对给定的数据进行签名,并返回签名结果。verify方法使用公钥对数据和签名进行验签,并返回验签结果。

在示例中,服务端和客户端分别生成自己的RSA密钥对,并互相交换公钥。然后,服务端使用自己的私钥对数据进行签名,客户端使用服务端的公钥进行验签;客户端使用自己的私钥对数据进行签名,服务端使用客户端的公钥进行验签。

请注意,上述示例仅用于演示目的,实际应用中需要妥善保管私钥,确保数据的完整性和安全性。

相关推荐
AI你一生一世8 小时前
不止于时序存储:DolphinDB 如何成为 AI 时代的工业智能底座
java·人工智能·struts·时序数据库·工业智能·dolphindb·ai基础设施
云-缩影9 小时前
拆解 AI 图像生成应用的后端架构:ECS、OSS 和大模型 API 怎么配合
java·spring boot·后端
瑞克-桑切斯9 小时前
7、MySQL 慢查询排查与优化实战指南
java·服务器·数据库
海的透彻13 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat13 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习14 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one14 小时前
算法--构造
java·数据结构·算法
SL_staff14 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff15 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko716 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端