c# - java公私钥 转 c# net 公私钥做 RSA 加解密操作
1.背景
java 和 c# 语言的公私钥格式是不同的,需要专门转换后才可以使用
2.c#工具类
using System; using System.Security.Cryptography; using System.Text; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; namespace Hypj.Logic.NCAPI { public class RsaTool { /// <summary> /// java 公钥 转 net格式 /// </summary> /// <param name="javaPublicKey"></param> /// <returns></returns> public static string JavaPublicKeyToNet(string javaPublicKey) { RsaKeyParameters publicKeyParam = (RsaKeyParameters) PublicKeyFactory.CreateKey(Convert.FromBase64String(javaPublicKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>", Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned())); } /// <summary> /// java 私钥 转 net格式 /// </summary> /// <param name="javaPrivateKey"></param> /// <returns></returns> public static string JavaPrivateKeyToNet(string javaPrivateKey) { RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(javaPrivateKey)); return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>", Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()), Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned())); } /// <summary> /// 公钥或公钥加密数据 /// </summary> /// <param name="input">字符串数据</param> /// <param name="key">net公钥或私钥</param> /// <returns>base64密文</returns> public static string EncryptByPub(string input, string key) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(key); byte[] cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(input), false); return Convert.ToBase64String(cipherbytes); } /// <summary> /// 私钥解密数据 /// 注意:公钥不可解密,c#只能做验证 /// </summary> /// <param name="input">字符串数据</param> /// <param name="privateKey">net私钥</param> /// <returns>解密后的字符串</returns> public static string DecryptByPri(string input, string privateKey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(privateKey); byte[] encryptedData = Convert.FromBase64String(input); byte[] decryptedData = rsa.Decrypt(encryptedData, false); return Encoding.UTF8.GetString(decryptedData); } } }
本文来自博客园,作者:岑惜,转载请注明原文链接:https://www.cnblogs.com/c2g5201314/p/18588381
响应开源精神相互学习,内容良币驱除劣币

浙公网安备 33010602011771号