Files
zsxt_nbzs_h5/Api/Ewide.Core/Util/RSAHandler.cs
2021-05-12 17:28:23 +08:00

98 lines
4.2 KiB
C#

using Furion.FriendlyException;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Util
{
public static class RSAHandler
{
/// <summary>
/// 生成公私钥
/// </summary>
/// <param name="PrivateKeyPath"></param>
/// <param name="PublicKeyPath"></param>
public static void RSAKey(string PrivateKeyPath, string PublicKeyPath)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
CreatePrivateKeyXML(PrivateKeyPath, provider.ToXmlString(true));
CreatePublicKeyXML(PublicKeyPath, provider.ToXmlString(false));
}
/// <summary>
/// 创建公钥文件
/// </summary>
/// <param name="path"></param>
/// <param name="publickey"></param>
public static void CreatePublicKeyXML(string path, string publickey)
{
using (FileStream publickeyxml = new FileStream(path, FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(publickeyxml))
{
sw.WriteLine(publickey);
}
}
}
/// <summary>
/// 创建私钥文件
/// </summary>
/// <param name="path"></param>
/// <param name="privatekey"></param>
public static void CreatePrivateKeyXML(string path, string privatekey)
{
using (FileStream privatekeyxml = new FileStream(path, FileMode.Create))
{
using (StreamWriter sw = new StreamWriter(privatekeyxml))
{
sw.WriteLine(privatekey);
}
}
}
/// <summary>
/// RSA加密
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static string RSAEncrypt(string content)
{
string publickey = @"<RSAKeyValue><Modulus>tu98wMoo297l+juulU4a3Xx7c2SZ93f0gTPKohE0uz4o8jWN8zXnAAfhf6MMTlkgf+qIwaORLtBQohDcX6Xp02Qe7Cq2LujVR+YJHxy2uo8+KTc5Rj/d0OkTjeCozGaJQH0XrwUO7w+rDnyXzA52IvMZPnUV3KnOj1mPH0IhrOU=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(publickey);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(cipherbytes);
}
/// <summary>
/// RSA解密
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public static string RSADecrypt(string content)
{
string privatekey = @"<RSAKeyValue><Modulus>tu98wMoo297l+juulU4a3Xx7c2SZ93f0gTPKohE0uz4o8jWN8zXnAAfhf6MMTlkgf+qIwaORLtBQohDcX6Xp02Qe7Cq2LujVR+YJHxy2uo8+KTc5Rj/d0OkTjeCozGaJQH0XrwUO7w+rDnyXzA52IvMZPnUV3KnOj1mPH0IhrOU=</Modulus><Exponent>AQAB</Exponent><P>7yKLJO9dobe7pNW3ob+Vse8kvlA+PObDrZNqFxUTLyXoAeHDnwz3BjJ2EVUPNJHV5F1/KPLTvADIjDrdB1qcbw==</P><Q>w9ZK0SHBddtE91skFFS72YDmxzmXumSuUyREStVul9ke0oU2HjcZA915bmR0Zrh1RzO3y1w9zXVn+GdZGjyd6w==</Q><DP>ncA67E2fhcwv0+hMcD5zYOLyaT2EISbWFQ43ISz879BgwcUOCEFEP+lP69Uh57sAz9pBxWCS/uXBZoh6QJysrw==</DP><DQ>vbC8F4YS1g3l55Koh+jra+qnnyHyDeGn2XCvlazWys7MRC40FWBZIp1MGdnDxhu1vZoi1SAr3O90HfA9JmTAsQ==</DQ><InverseQ>00v2vMCcgXy78eMby7R6zfZzacVnVFO2WeyxYF7pjrXYYP+C4JSJkWpy6JGLWbgZrK8HAuRguJmdRi8K2KiYWg==</InverseQ><D>rV3nb9nmwQDMGMrI2GyN30uivygfFj0TdgK8Tb1aqPzu1yRT46M4yXmuhkTiW7nxp+iANGssIx5+3Ch4gRj+r6BgBPldWNErK95a2v2Ae1+EzfVf21ybguBYeUVnV9c8qwoodZSVOajZapOgoS6s5TEOxHWRcF22AiFuaD1Tl90=</D></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
try
{ //很有可能是报文被修改 情况很小
rsa.FromXmlString(privatekey);
cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
return Encoding.UTF8.GetString(cipherbytes);
}
catch
{
throw Oops.Oh(ErrorCode.D1000);
}
}
}
}