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

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

  • 相关阅读:
    【深度学习】LeNet网络架构
    【ChatGPT】无需代理使用ChatGPT
    十年耕耘,致力于让垂直领域合作企业提升竞争力
    【C++】string的底层剖析以及模拟实现
    【Cookie,Session,Token,JWT的区别】
    Java:缓存行和伪共享
    LeetCode 75 part 05 哈希表/哈希集合
    Java语言基础(上)
    5.4 Windows驱动开发:内核通过PEB取进程参数
    三个多月、40余场面试浓缩为6000字
  • 原文地址:https://blog.csdn.net/gb4215287/article/details/133915941