.NET Core RSA 加密

RSA加密不可跨平台版本

使用类System.Security.Cryptography.RSACryptoServiceProvider进行RSA加/解密

RSACryptoServiceProvider不支持夸平台

完整代码

/// <summary>
/// RSA不可跨平台方式
/// </summary>
public class RSAHelper
{
    /// <summary>
    /// 获取RSA 密钥
    /// 下标 0 为 私钥
    /// 下标 1 为 公钥
    /// </summary>
    /// <returns></returns>
    public static string[] GetRSAKey()
    {
        RSACryptoServiceProvider provider = new RSACryptoServiceProvider();//RSACryptoServiceProvider 不支持夸平台
        string privatekey = provider.ToXmlString(true);
        string publickey = provider.ToXmlString(false);
        return new string[] { privatekey, publickey };
    }

    /// <summary>
    /// RSA 加密
    /// </summary>
    /// <param name="plainText">加密内容</param>
    /// <returns></returns>
    public string RSAEncrypt(string plainText,string publicKey)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(plainText);
        RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
        provider.FromXmlString(publicKey);
        byte[] output = provider.Encrypt(buffer, false);//true 使用OAEP的Rsa加密方式填充(仅在运行Windows XP或更高版本的计算机上可用),否则使用PKCS#1加密方式填充
        return Convert.ToBase64String(output);
    }

    /// <summary>
    /// RSA 解密
    /// </summary>
    /// <param name="encryptedText"></param>
    /// <returns></returns>
    public string RSADecrypt(string encryptedText,string privateKey)
    {
        byte[] buffer = Convert.FromBase64String(encryptedText);
        RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
        provider.FromXmlString(privateKey);
        byte[] output = provider.Decrypt(buffer, false);
        return Encoding.UTF8.GetString(output);
    }

    /// <summary>
    /// 私钥Xml转Pkcs8格式
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public string RsaPrivateKeyXmlToPkcs8(string privateKey)
    {
        //私钥XML格式转Pkcs8格式
       return  RsaKeyConvert.PrivateKeyXmlToPkcs8(privateKey);
       
    }

    /// <summary>
    /// 公钥XML格式转Pem格式
    /// </summary>
    /// <param name="publicKey"></param>
    /// <returns></returns>
    public string RsaPublicKeyXmlToPem(string publicKey)
    {
        //公钥XML格式转Pem格式
        return RsaKeyConvert.PublicKeyXmlToPem(publicKey);
    }



}

 

RSA加密可跨平台版本

使用类System.Security.Cryptography.RSA

使用System.Security.Cryptography.RSA.Create()创建实例,在 Windows 上创建的是 System.Security.Cryptography.RSACng 的实例,在 Mac 与 Linux 上创建的是 System.Security.Cryptography.RSAOpenSsl 的实例

完整代码

/// <summary>
/// RSA可跨平台的方式  System.Security.Cryptography.RSA.Create()的方式可跨平台
/// Windows上的实例System.Security.Cryptography.RSACng
/// Mac与Linux上创建的是 System.Security.Cryptography.RSAOpenSsl 的实例
/// </summary>
public static class RSACoreHelper
{
    /// <summary>
    /// 获取RSA 密钥
    /// 下标 0 为 私钥
    /// 下标 1 为 公钥
    /// </summary>
    /// <returns></returns>
    public static string[] GetRSAKey()
    {
        var provider = RSA.Create();
        string privatekey = provider.ToXmlString(true);
        string publickey = provider.ToXmlString(false);
        return new string[] { privatekey, publickey };
    }

    /// <summary>
    /// RSA 加密
    /// </summary>
    /// <param name="plainText">加密内容</param>
    /// <returns></returns>
    public static string RSAEncrypt(string plainText, string publicKey)
    {
        byte[] buffer = Encoding.UTF8.GetBytes(plainText);
        var provider = RSA.Create();
        provider.FromXmlString(publicKey);
        byte[] output = provider.Encrypt(buffer, RSAEncryptionPadding.Pkcs1);
        return Convert.ToBase64String(output);
    }

    /// <summary>
    /// RSA 解密
    /// </summary>
    /// <param name="encryptedText"></param>
    /// <returns></returns>
    public static string RSADecrypt(string encryptedText, string privateKey)
    {
        byte[] buffer = Convert.FromBase64String(encryptedText);
        var provider = RSA.Create();
        provider.FromXmlString(privateKey);
        byte[] output = provider.Decrypt(buffer, RSAEncryptionPadding.Pkcs1);
        return Encoding.UTF8.GetString(output);
    }

    /// <summary>
    /// 私钥Xml转Pkcs8格式
    /// </summary>
    /// <param name="key"></param>
    /// <returns></returns>
    public static string RsaPrivateKeyXmlToPkcs8(string privateKey)
    {
        //私钥XML格式转Pkcs8格式
        return RsaKeyConvert.PrivateKeyXmlToPkcs8(privateKey);

    }

    /// <summary>
    /// 公钥XML格式转Pem格式
    /// </summary>
    /// <param name="publicKey"></param>
    /// <returns></returns>
    public static string RsaPublicKeyXmlToPem(string publicKey)
    {
        //公钥XML格式转Pem格式
        return RsaKeyConvert.PublicKeyXmlToPem(publicKey);
    }

}

 

posted @ 2025-05-28 12:14  流年sugar  阅读(76)  评论(0)    收藏  举报