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

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

  • 相关阅读:
    扔掉你的开发板,跟我玩Mcore-全志h616
    你还在为SFTP连接超时而困惑么?
    17.linuxGPIO应用编程
    【自然语言处理】关系抽取 —— SIEF 概述
    这短短 6 行代码你能数出几个bug?
    java计算机毕业设计济南旅游网站MyBatis+系统+LW文档+源码+调试部署
    VCS 和 SCM
    Allegro如何查看器件的管脚号?
    Docker Desktop Windows 无法启动
    qnx 工程目录创建工具 addvariant
  • 原文地址:https://blog.csdn.net/gb4215287/article/details/133915941