86 lines
4.8 KiB
C#
86 lines
4.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection.Metadata;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Org.BouncyCastle.Asn1.Pkcs;
|
|
using Org.BouncyCastle.Asn1.X509;
|
|
using Org.BouncyCastle.Crypto.Parameters;
|
|
using Org.BouncyCastle.Math;
|
|
using Org.BouncyCastle.Pkcs;
|
|
using Org.BouncyCastle.Security;
|
|
using Org.BouncyCastle.X509;
|
|
|
|
namespace Competition.Common.Util
|
|
{
|
|
public static class RSAHelper
|
|
{
|
|
private static string privateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDZMSy18BMV0Nae1slMI96v0U53BNF7nxWPL1Pbfz+5RBjKhMcKV9AIIqfKzh6UcITQPQHsP+TaEr1T7G7WFa/W/iUf6f63l241Uarexrn6k6ryPXO15zdb7CVwWCmVgmrvxcFgZgNvJ+Ga7kp4N4iayJxzCerda+KB9lg9tO8a/ZiypcOlOn7+zSFCyth4BOvYy6GIGFAbKctS8oIRxa938Y0HIzEl0nCXST4hlb4OIIOY1f1DCPbccXtT46buMRkL4uL+PYwcDkLh4S1XOBULhVkRNU4hwu/9QO5+cCWd5MkrYTGj7hgUSD1LWyGmpTP2yFIGXwkX0MzZrcoqbFzjAgMBAAECggEBAMA1+7qb11gUNQvnS8hdakMwuf8svXNpC3xnRxBW4f9Em6gGr9ugcRPyD4q0tW1q0q8zfpMkzJSNxw4RjNlb4f0jd5lxzSGPG1KGjvCO8KIosz2kUtXl5SEtsMhmzY5qF9dQrN1yCpIBunAReMhBZVyOM56/ZSJFyvR3HgqmKIE50YsrV6/kteLfZCa1uYmNbSEtNcMLrXlhvHbjWf8hd9W2MjxO9ZIbStPNEXGnA1hGJBCiUQjBYP+/rJudLUe8hsF4hJ8+flO1ZSyNxmrNBEfzzV7X9oEM+e5otF07pzd8snoZZe8x0CLBlqmfTivd7I3cMCQI/ocDIF0Mt2Bqy4ECgYEA9VyPXs8T4yJrai5Ui4NXbxBBP8r19KScxhNe9scZTRR4o/ABrQwX+yRdfSz72KTisRRqzfz2T+Zbwpj/U/kyfaGgqeF60JdwxHLjvnR+F+R+2zY9MIVR/oyVD8nM42BYUpnStUjd3EbOq/NuP88/cJdJpFdhGyVARc/+dH7pOkECgYEA4pvxHpESbxsnjtMy/g+hAaR/87w39fvKmVye05NT+YTGWiG5LVY3dJea4/w0SNLK6QCkFLXzCoh+jKbhXyPBhXlHIqRzim41DIwQeYZi7wu9Cx0s/yfEaxWsF3WcrPnagmTskTaKLbPFDCduJu9ywXi65Zjz7xqasyY2HVtz5iMCgYEAq9+OvscoEy+FNvgFWUVD9hTY4Cr4Z8r31viyyQNnAcuZRp1VTzbthYtPwePE91lpQsoelvTgRdAD7yjlkpk5eS/DL703Hu82myYvyrYnreztv/kam+aILVuk/05JK+3NcO833q2QXEFtfJ4lWKWAtwoDGA/tgepyP3UXtdtA3QECgYBKOwL1HFiJhL+kjZJ6nuwC+bvgP5ulPGHVcv2kGPK9Hb1L8RgTvdZUnwTiAc+uuz40rT0Se7etj6DEujXBUJkn+95NfslKY2eFQKx04oyt+Y5ngZsnygMRgPvqg2BbWU02wZCs0Mzaw7Sckp4GqxFQRxgR9dSSUoiyfqXjX/3LOQKBgQDAe63xXpMcFMp6xhvklOi8qNOfqGJttD4XhqJAQiUL7fblKAINxScrGSQQR+QKDTExiUkWhVYicpMq0CajwOPwXTC0xNBC9k5YP+yo+k+e+uRiUDjZGJekEzyJnXKJCCT2U23s172ltqsobsSfjXLVwHm2cg1gMwedo3455S8QtA==";
|
|
|
|
// 解密数据
|
|
public static string DecryptData(string content)
|
|
{
|
|
var private_key = ToXmlPrivateKey(privateKey);
|
|
var data = Convert.FromBase64String(content);
|
|
string encryptedContent = string.Empty;
|
|
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
|
{
|
|
rsa.FromXmlString(private_key);
|
|
byte[] encryptedData = rsa.Decrypt(data, false);
|
|
encryptedContent = Encoding.UTF8.GetString(encryptedData);
|
|
}
|
|
return encryptedContent;
|
|
}
|
|
|
|
/// <summary>
|
|
/// base64 private key string -> xml private key
|
|
/// </summary>
|
|
/// <param name="privateKey"></param>
|
|
/// <returns></returns>
|
|
public static string ToXmlPrivateKey(string privateKey)
|
|
{
|
|
RsaPrivateCrtKeyParameters privateKeyParams =
|
|
PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey)) as RsaPrivateCrtKeyParameters;
|
|
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
|
{
|
|
RSAParameters rsaParams = new RSAParameters()
|
|
{
|
|
Modulus = privateKeyParams.Modulus.ToByteArrayUnsigned(),
|
|
Exponent = privateKeyParams.PublicExponent.ToByteArrayUnsigned(),
|
|
D = privateKeyParams.Exponent.ToByteArrayUnsigned(),
|
|
DP = privateKeyParams.DP.ToByteArrayUnsigned(),
|
|
DQ = privateKeyParams.DQ.ToByteArrayUnsigned(),
|
|
P = privateKeyParams.P.ToByteArrayUnsigned(),
|
|
Q = privateKeyParams.Q.ToByteArrayUnsigned(),
|
|
InverseQ = privateKeyParams.QInv.ToByteArrayUnsigned()
|
|
};
|
|
rsa.ImportParameters(rsaParams);
|
|
return rsa.ToXmlString(true);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// base64 public key string -> xml public key
|
|
/// </summary>
|
|
/// <param name="pubilcKey"></param>
|
|
/// <returns></returns>
|
|
public static string ToXmlPublicKey(string pubilcKey)
|
|
{
|
|
RsaKeyParameters p =
|
|
PublicKeyFactory.CreateKey(Convert.FromBase64String(pubilcKey)) as RsaKeyParameters;
|
|
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
|
|
{
|
|
RSAParameters rsaParams = new RSAParameters
|
|
{
|
|
Modulus = p.Modulus.ToByteArrayUnsigned(),
|
|
Exponent = p.Exponent.ToByteArrayUnsigned()
|
|
};
|
|
rsa.ImportParameters(rsaParams);
|
|
return rsa.ToXmlString(false);
|
|
}
|
|
}
|
|
}
|
|
}
|