RSA非对称加密学习

2024-01-02 14:43:26

设计方案:
单位生成密钥对: 每个单位(A、B、C、D等)生成自己的 RSA 密钥对,包括一个私钥和一个对应的公钥。

A单位加密数据: 单位A作为数据加密方,使用其他单位的公钥对数据进行加密。

其他单位解密数据: 其他单位使用自己的私钥对接收到的加密数据进行解密。

Java 代码示例:
以下是一个简化的 Java 代码示例,使用 RSA 算法进行数据的加密和解密。

import javax.crypto.Cipher;
import java.security.*;
import java.util.Base64;

public class RSAEncryptionExample {
    public static void main(String[] args) throws Exception {
        // Unit A - Data Encryption Unit
        KeyPair unitAKeyPair = generateKeyPair();
        PublicKey unitAPublicKey = unitAKeyPair.getPublic();
        PrivateKey unitAPrivateKey = unitAKeyPair.getPrivate();

        // Other units (B, C, D)
        PublicKey sharedPublicKey = unitAPublicKey; // Assume other units have access to A's public key

        // Simulate data encryption by Unit A
        String dataToEncrypt = "Sensitive data";
        String encryptedDataByA = encryptData(dataToEncrypt, sharedPublicKey);

        // Simulate data decryption by other units (B, C, D)
        String decryptedDataByB = decryptData(encryptedDataByA, unitAPrivateKey);

        // Display results
        System.out.println("Encrypted data by A: " + encryptedDataByA);
        System.out.println("Decrypted data by B: " + decryptedDataByB);
    }

    private static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048); // Change this size based on your security requirements
        return keyPairGenerator.generateKeyPair();
    }

    private static String encryptData(String data, PublicKey publicKey) throws Exception {
        // Encryption using RSA algorithm with a public key

        // Initialize RSA Cipher in encryption mode
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        // Encrypt the data
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    private static String decryptData(String encryptedData, PrivateKey privateKey) throws Exception {
        // Decryption using RSA algorithm with a private key

        // Initialize RSA Cipher in decryption mode
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        // Decrypt the data
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedBytes);
    }
}

这个设计中,A单位作为数据加密方,其他单位使用自己的私钥进行解密。公钥可以通过其他安全的手段传递给其他单位。请注意,这个示例中使用的 RSA 密钥大小为2048位,您可能需要根据实际安全需求调整密钥大小。

文章来源:https://blog.csdn.net/run65536/article/details/135339036
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。