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

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

相关推荐
程序员张32 小时前
Maven编译和打包插件
java·spring boot·maven
ybq195133454313 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339463 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8504 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟6 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
DuelCode7 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社27 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
幽络源小助理7 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码7 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot