/// <summary>
/// 非对称加密、解密、验证辅助类
/// </summary>
public class RSASecurityHelper
{
/// <summary>
/// 非对称加密生成的私钥和公钥
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="publicKey">公钥</param>
public static void GenerateRSAKey(out string privateKey, out string publicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
privateKey = rsa.ToXmlString(true);
publicKey = rsa.ToXmlString(false);
}
#region 非对称数据加密(公钥加密)
/// <summary>
/// 非对称加密字符串数据,返回加密后的数据
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="originalString">待加密的字符串</param>
/// <returns>加密后的数据</returns>
public static string RSAEncrypt(string publicKey, string originalString)
{
byte[] PlainTextBArray = UTF8Encoding.Default.GetBytes(originalString);
string Result = RSAEncrypt(publicKey, PlainTextBArray);
return Result;
}
/// <summary>
/// 非对称加密字节数组,返回加密后的数据
/// </summary>
/// <param name="publicKey">公钥</param>
/// <param name="originalBytes">待加密的字节数组</param>
/// <returns>返回加密后的数据</returns>
public static string RSAEncrypt(string publicKey, byte[] originalBytes)
{
byte[] CypherTextBArray;
string Result;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publicKey);
CypherTextBArray = rsa.Encrypt(originalBytes, false);
Result = Convert.ToBase64String(CypherTextBArray);
return Result;
}
#endregion
#region 非对称解密(私钥解密)
/// <summary>
/// 非对称解密字符串,返回解密后的数据
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="encryptedString">待解密数据</param>
/// <returns>返回解密后的数据</returns>
public static string RSADecrypt(string privateKey, string encryptedString)
{
byte[] PlainTextBArray = Convert.FromBase64String(encryptedString);
string Result = RSADecrypt(privateKey, PlainTextBArray);
return Result;
}
/// <summary>
/// 非对称解密字节数组,返回解密后的数据
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="encryptedBytes">待解密数据</param>
/// <returns></returns>
public static string RSADecrypt(string privateKey, byte[] encryptedBytes)
{
byte[] DypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privateKey);
DypherTextBArray = rsa.Decrypt(encryptedBytes, false);
Result = UTF8Encoding.Default.GetString(DypherTextBArray);
return Result;
}
#endregion
#region 非对称加密签名、验证
/// <summary>
/// 使用非对称加密签名数据
/// </summary>
/// <param name="privateKey">私钥</param>
/// <param name="originalString">待加密的字符串</param>
/// <returns>加密后的数据</returns>
public static string RSAEncrypSignature(string privateKey, string originalString)
{
string signature;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
// 私钥
rsa.FromXmlString(privateKey);
// 加密对象
RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
f.SetHashAlgorithm("SHA1");
byte[] source = UTF8Encoding.Default.GetBytes(originalString);
SHA1 sha = SHA1.Create();
byte[] result = sha.ComputeHash(source);
byte[] b = f.CreateSignature(result);
signature = Convert.ToBase64String(b);
}
return signature;
}
/// <summary>
/// 对私钥加密的字符串,使用公钥对其进行验证
/// </summary>
/// <param name="originalString">未加密的文本,如机器码</param>
/// <param name="encrytedString">加密后的文本,如注册序列号</param>
/// <param name="publicKey">非对称加密的公钥</param>
/// <returns>如果验证成功返回True,否则为False</returns>
public static bool Validate(string originalString, string encrytedString, string publicKey)
{
bool bPassed = false;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
try
{
// 公钥
rsa.FromXmlString(publicKey);
RSAPKCS1SignatureDeformatter formatter = new RSAPKCS1SignatureDeformatter(rsa);
formatter.SetHashAlgorithm("SHA1");
// 验证
byte[] key = Convert.FromBase64String(encrytedString);
SHA1 sha = SHA1.Create();
byte[] name = sha.ComputeHash(UTF8Encoding.GetEncoding("gb2312").GetBytes(originalString));
if (formatter.VerifySignature(name, key))
{
bPassed = true;
}
}
catch
{
}
}
return bPassed;
}
#endregion
}
RSA 非对称加密、解密、验证辅助类
原创
©著作权归作者所有:来自51CTO博客作者皮皮烁烁的爸爸的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android RSA非对称加密/解密
Android RSA非对称加密/解密什么是Rsa加密RSA算法是最流行的公钥密码算数e,e必须与(p-1)(q-1)互素。3.用公式计...
非对称加密 RSA 非对称解密 Android数据加密 RSA加密 -
C#-RSA加密解密帮助类(非对称加密)
/***
ide 字符串 System -
【Kotlin】加密解密3:非对称加密RSA
看之前的api文档,AES/DES是加密算法,中间的是工作模式,最后的是填充模式
RSA kotlin 加密解密 分段加密 密钥对