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
响应开源精神相互学习,内容良币驱除劣币
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2022-12-05 c++ - 误删cmake-build-debug ,clion具体解决
2021-12-05 vue3.0 没有 vue.condig.js 解决
2021-12-05 win10 安装vue 详解-包括node.js、npm、webpack