.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); } }