58 lines
2.1 KiB
C#
58 lines
2.1 KiB
C#
using Newtonsoft.Json;
|
|
using System.IO;
|
|
using System.Security.Cryptography;
|
|
|
|
namespace ZhaoXi._001.NET5Demo.Practice.WebApi.Utility.Jwt
|
|
{
|
|
public class RSAHelper
|
|
{
|
|
/// <summary>
|
|
/// 从本地文件中读取用来签发 Token 的 RSA Key
|
|
/// </summary>
|
|
/// <param name="filePath">存放密钥的文件夹路径</param>
|
|
/// <param name="withPrivate"></param>
|
|
/// <param name="keyParameters"></param>
|
|
/// <returns></returns>
|
|
public static bool TryGetKeyParameters(string filePath, bool withPrivate, out RSAParameters keyParameters)
|
|
{
|
|
string filename = withPrivate ? "key.json" : "key.public.json";
|
|
string fileTotalPath = Path.Combine(filePath, filename);
|
|
keyParameters = default(RSAParameters);
|
|
if (!File.Exists(fileTotalPath))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
keyParameters = JsonConvert.DeserializeObject<RSAParameters>(File.ReadAllText(fileTotalPath));
|
|
return true;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 生成并保存 RSA 公钥与私钥
|
|
/// </summary>
|
|
/// <param name="filePath"></param>
|
|
/// <param name="withPrivate"></param>
|
|
/// <returns></returns>
|
|
public static RSAParameters GenerateAndSaveKey(string filePath, bool withPrivate = true)
|
|
{
|
|
RSAParameters publicKeys, privateKeys;
|
|
using (var rsa = new RSACryptoServiceProvider(2048))//即时生成
|
|
{
|
|
try
|
|
{
|
|
privateKeys = rsa.ExportParameters(true);
|
|
publicKeys = rsa.ExportParameters(false);
|
|
}
|
|
finally
|
|
{
|
|
rsa.PersistKeyInCsp = false;
|
|
}
|
|
}
|
|
File.WriteAllText(Path.Combine(filePath, "key.json"), JsonConvert.SerializeObject(privateKeys));
|
|
File.WriteAllText(Path.Combine(filePath, "key.public.json"), JsonConvert.SerializeObject(publicKeys));
|
|
return withPrivate ? privateKeys : publicKeys;
|
|
}
|
|
}
|
|
}
|