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

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

相关推荐
A懿轩A4 分钟前
【Maven 构建工具】从零到上手 Maven:安装配置 + IDEA 集成 + 第一个项目(保姆级教程)
java·maven·intellij-idea
野犬寒鸦13 分钟前
从零起步学习并发编程 || 第一章:初步认识进程与线程
java·服务器·后端·学习
我爱娃哈哈18 分钟前
SpringBoot + Flowable + 自定义节点:可视化工作流引擎,支持请假、报销、审批全场景
java·spring boot·后端
XiaoFan01236 分钟前
将有向工作流图转为结构树的实现
java·数据结构·决策树
小突突突1 小时前
浅谈Java中的反射
java·开发语言
Anastasiozzzz1 小时前
LeetCode Hot100 295. 数据流的中位数 MedianFinder
java·服务器·前端
我真的是大笨蛋1 小时前
Redo Log详解
java·数据库·sql·mysql·性能优化
索荣荣1 小时前
Java动态代理实战:从原理到精通
java·开发语言
兩尛2 小时前
c++的数组和Java数组的不同
java·开发语言·c++
roman_日积跬步-终至千里2 小时前
【Java并发】多线程/并发问题集
java·开发语言