设计方案:
单位生成密钥对: 每个单位(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位,您可能需要根据实际安全需求调整密钥大小。