用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密钥对,并互相交换公钥。然后,服务端使用自己的私钥对数据进行签名,客户端使用服务端的公钥进行验签;客户端使用自己的私钥对数据进行签名,服务端使用客户端的公钥进行验签。

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

相关推荐
q***95227 小时前
Tomcat下载,安装,配置终极版(2024)
java·tomcat
2***d8857 小时前
详解tomcat中的jmx监控
java·tomcat
无敌最俊朗@7 小时前
Qt事件循环队列剖析!!!
java
v***5657 小时前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
python零基础入门小白8 小时前
【万字长文】大模型应用开发:意图路由与查询重写设计模式(从入门到精通)
java·开发语言·设计模式·语言模型·架构·大模型应用开发·大模型学习
高山上有一只小老虎8 小时前
构造A+B
java·算法
学困昇8 小时前
C++中的异常
android·java·c++
MC丶科8 小时前
Java设计模式漫画英雄宇宙-工厂模式 —Factory博士的“超级英雄制造机”!
java·设计模式·漫画
虎子_layor8 小时前
告别Redis瓶颈:Caffeine本地缓存优化实战指南
java·后端
q***98528 小时前
什么是Spring Boot 应用开发?
java·spring boot·后端