update RSA

This commit is contained in:
2021-05-13 13:29:41 +08:00
parent 9c91b88ddf
commit 6b34ab59c2
4 changed files with 63 additions and 58 deletions

View File

@@ -7018,37 +7018,32 @@
<param name="Milliseconds"></param> <param name="Milliseconds"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Ewide.Core.Util.RSAHandler.RSAKey(System.String,System.String)"> <member name="M:Ewide.Core.Util.RSAHandler.Xml2PemPublic(System.String,System.String)">
<summary> <summary>
生成公私钥 XML 文件转成PEM 公钥格式
</summary> </summary>
<param name="PrivateKeyPath"></param> <param name="xml"></param>
<param name="PublicKeyPath"></param> <param name="saveFile"></param>
<returns></returns>
</member> </member>
<member name="M:Ewide.Core.Util.RSAHandler.CreatePublicKeyXML(System.String,System.String)"> <member name="M:Ewide.Core.Util.RSAHandler.Format(System.String,System.Int32)">
<summary> <summary>
创建公钥文件 格式化
</summary> </summary>
<param name="path"></param> <param name="key"></param>
<param name="publickey"></param> <param name="type"></param>
</member> <returns></returns>
<member name="M:Ewide.Core.Util.RSAHandler.CreatePrivateKeyXML(System.String,System.String)">
<summary>
创建私钥文件
</summary>
<param name="path"></param>
<param name="privatekey"></param>
</member> </member>
<member name="M:Ewide.Core.Util.RSAHandler.RSAEncrypt(System.String)"> <member name="M:Ewide.Core.Util.RSAHandler.RSAEncrypt(System.String)">
<summary> <summary>
RSA加密 RSA加密 公钥
</summary> </summary>
<param name="content"></param> <param name="content"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Ewide.Core.Util.RSAHandler.RSADecrypt(System.String)"> <member name="M:Ewide.Core.Util.RSAHandler.RSADecrypt(System.String)">
<summary> <summary>
RSA解密 RSA解密 私钥
</summary> </summary>
<param name="content"></param> <param name="content"></param>
<returns></returns> <returns></returns>

View File

@@ -70,7 +70,7 @@ namespace Ewide.Core.Service
[AllowAnonymous] [AllowAnonymous]
public async Task<string> LoginAsync([Required] LoginInput input) public async Task<string> LoginAsync([Required] LoginInput input)
{ {
var pwd = input.Password; // RSAHandler.RSADecrypt(input.Password); string pwd = RSAHandler.RSADecrypt(input.Password);
// 获取加密后的密码 // 获取加密后的密码
var encryptPasswod = MD5Encryption.Encrypt(pwd); var encryptPasswod = MD5Encryption.Encrypt(pwd);

View File

@@ -1,4 +1,9 @@
using Furion.FriendlyException; using Furion;
using Furion.FriendlyException;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.X509;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@@ -11,59 +16,60 @@ namespace Ewide.Core.Util
{ {
public static class RSAHandler public static class RSAHandler
{ {
/// <summary> /// <summary>
/// 生成公私钥 /// XML 文件转成PEM 公钥格式
/// </summary> /// </summary>
/// <param name="PrivateKeyPath"></param> /// <param name="xml"></param>
/// <param name="PublicKeyPath"></param> /// <param name="saveFile"></param>
public static void RSAKey(string PrivateKeyPath, string PublicKeyPath) /// <returns></returns>
public static string Xml2PemPublic(string xml, string saveFile)
{ {
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); var rsa = new RSACryptoServiceProvider();
CreatePrivateKeyXML(PrivateKeyPath, provider.ToXmlString(true)); rsa.FromXmlString(xml); var p = rsa.ExportParameters(false);
CreatePublicKeyXML(PublicKeyPath, provider.ToXmlString(false)); RsaKeyParameters key = new RsaKeyParameters(false, new BigInteger(1, p.Modulus), new BigInteger(1, p.Exponent)); using (var sw = new StreamWriter(saveFile))
}
/// <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)) var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(sw);
{ pemWriter.WriteObject(key);
sw.WriteLine(publickey);
}
} }
SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(key); byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
string publicKey = Convert.ToBase64String(serializedPublicBytes);
return Format(publicKey, 1);
} }
/// <summary> /// <summary>
/// 创建私钥文件 /// 格式化
/// </summary> /// </summary>
/// <param name="path"></param> /// <param name="key"></param>
/// <param name="privatekey"></param> /// <param name="type"></param>
public static void CreatePrivateKeyXML(string path, string privatekey) /// <returns></returns>
public static string Format(string key, int type)
{ {
using (FileStream privatekeyxml = new FileStream(path, FileMode.Create)) string result = string.Empty; int length = key.Length / 64; for (int i = 0; i < length; i++)
{ {
using (StreamWriter sw = new StreamWriter(privatekeyxml)) int start = i * 64;
{ result = result + key.Substring(start, 64) + "\r\n";
sw.WriteLine(privatekey);
}
} }
}
result = result + key.Substring(length * 64); if (type == 1)
{
result = result.Insert(0, "-----BEGIN PUBLIC KEY-----\r\n");
result += "\r\n-----END PUBLIC KEY-----";
}
if (type == 2)
{
result = result.Insert(0, "-----BEGIN PRIVATE KEY-----\r\n");
result += "\r\n-----END PRIVATE KEY-----";
}
return result;
}
/// <summary> /// <summary>
/// RSA加密 /// RSA加密 公钥
/// </summary> /// </summary>
/// <param name="content"></param> /// <param name="content"></param>
/// <returns></returns> /// <returns></returns>
public static string RSAEncrypt(string content) public static string RSAEncrypt(string content)
{ {
string publickey = @"<RSAKeyValue><Modulus>tu98wMoo297l+juulU4a3Xx7c2SZ93f0gTPKohE0uz4o8jWN8zXnAAfhf6MMTlkgf+qIwaORLtBQohDcX6Xp02Qe7Cq2LujVR+YJHxy2uo8+KTc5Rj/d0OkTjeCozGaJQH0XrwUO7w+rDnyXzA52IvMZPnUV3KnOj1mPH0IhrOU=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; //string publickey = @"<RSAKeyValue><Modulus>tu98wMoo297l+juulU4a3Xx7c2SZ93f0gTPKohE0uz4o8jWN8zXnAAfhf6MMTlkgf+qIwaORLtBQohDcX6Xp02Qe7Cq2LujVR+YJHxy2uo8+KTc5Rj/d0OkTjeCozGaJQH0XrwUO7w+rDnyXzA52IvMZPnUV3KnOj1mPH0IhrOU=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
string publickey = App.Configuration["RSA:publickey"];
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes; byte[] cipherbytes;
rsa.FromXmlString(publickey); rsa.FromXmlString(publickey);
@@ -72,14 +78,14 @@ namespace Ewide.Core.Util
} }
/// <summary> /// <summary>
/// RSA解密 /// RSA解密 私钥
/// </summary> /// </summary>
/// <param name="content"></param> /// <param name="content"></param>
/// <returns></returns> /// <returns></returns>
public static string RSADecrypt(string content) 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>"; //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>";
string privatekey = App.Configuration["RSA:privatekey"];
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes; byte[] cipherbytes;
try try

View File

@@ -27,6 +27,10 @@
"DataBase": "DataBaseXml", "DataBase": "DataBaseXml",
"ReadSelect": "SeedData" // SeedData 和 DataBase 两个中间选 "ReadSelect": "SeedData" // SeedData 和 DataBase 两个中间选
}, },
"RSA": {
"publickey": "<RSAKeyValue><Modulus>tu98wMoo297l+juulU4a3Xx7c2SZ93f0gTPKohE0uz4o8jWN8zXnAAfhf6MMTlkgf+qIwaORLtBQohDcX6Xp02Qe7Cq2LujVR+YJHxy2uo8+KTc5Rj/d0OkTjeCozGaJQH0XrwUO7w+rDnyXzA52IvMZPnUV3KnOj1mPH0IhrOU=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>",
"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>"
},
"Cache": { "Cache": {
"CacheType": "MemoryCache", // RedisCache "CacheType": "MemoryCache", // RedisCache
"RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2" "RedisConnectionString": "127.0.0.1:6379,password=,defaultDatabase=2"