C# 通过 Java 生成的 RSA 公钥加密和解密

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,常用于保护数据的机密性和完整性。在跨平台的应用中,可能需要在不同的编程语言之间进行加密和解密操作。本文将介绍如何使用 C# 通过 Java 生成的 RSA 公钥进行加密和解密操作。

生成 RSA 密钥对

首先,我们需要在 Java 中生成 RSA 密钥对,并将公钥导出为字符串格式。以下是一个生成 RSA 密钥对并导出公钥的 Java 示例代码:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPublicKey;
import java.util.Base64;

public class RSAKeyGenerator {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 生成 RSA 密钥对
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(2048);
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        
        // 导出公钥为字符串
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded());
        
        System.out.println("RSA Public Key:");
        System.out.println(publicKeyString);
    }
}

上述代码生成了一个 2048 位的 RSA 密钥对,并将公钥以 Base64 编码的字符串格式打印出来。

C# 中的 RSA 加密和解密

在 C# 中,我们可以使用 RSACryptoServiceProvider 类来进行 RSA 加密和解密操作。以下是一个使用 Java 生成的 RSA 公钥进行加密和解密的 C# 示例代码:

using System;
using System.Security.Cryptography;
using System.Text;

public class RSAEncryption {
    public static void Main(string[] args) {
        string publicKeyString = "<Java 生成的 RSA 公钥>";
        string plainText = "Hello, RSA!";
        
        // 将 Java 导出的公钥字符串转换为 C# 的公钥
        byte[] publicKeyBytes = Convert.FromBase64String(publicKeyString);
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.ImportRSAPublicKey(publicKeyBytes, out _);
        
        // 加密
        byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(plainText), true);
        
        Console.WriteLine("Encrypted Data:");
        Console.WriteLine(Convert.ToBase64String(encryptedData));
        
        // 解密
        byte[] decryptedData = rsa.Decrypt(encryptedData, true);
        string decryptedText = Encoding.UTF8.GetString(decryptedData);
        
        Console.WriteLine("Decrypted Text:");
        Console.WriteLine(decryptedText);
    }
}

上述代码中,<Java 生成的 RSA 公钥> 部分需要替换为实际的 Java 生成的 RSA 公钥字符串。代码首先将 Java 导出的公钥字符串转换为 C# 的公钥,然后使用公钥对明文进行加密,再使用私钥对密文进行解密。

总结

本文介绍了如何使用 C# 通过 Java 生成的 RSA 公钥进行加密和解密操作。首先在 Java 中生成 RSA 密钥对并导出公钥为字符串格式,然后在 C# 中使用该公钥进行加密和解密。通过这种方式,我们可以在跨平台的应用中实现安全的数据传输和存储。

希望本文对你理解和实践 C# 中使用 Java 生成的 RSA 公钥加密和解密有所帮助。如果有任何问题,请随时提问。