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

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

相关推荐
心之语歌1 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊2 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang2 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang3 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解4 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing8 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean8 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven979 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55118 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河19 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化