C# RSA加解密和MD5加密
1.RSA加密
/// <summary>
/// 加密处理
/// </summary>
/// <param name="content"></param>
/// <param name="publicKeyPem"></param>
/// <param name="charset"></param>
/// <returns></returns>
public static string RSAEncrypt(string content, string publicKeyPem, string charset = "UTF-8")
{
try
{
string sPublicKeyPEM = File.ReadAllText(publicKeyPem); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.PersistKeyInCsp = false;
RSACryptoServiceProviderExtension.LoadPublicKeyPEM(rsa, sPublicKeyPEM); byte[] data = Encoding.GetEncoding(charset).GetBytes(content);
int maxBlockSize = rsa.KeySize / - ; //加密块最大长度限制
if (data.Length <= maxBlockSize)
{
byte[] cipherbytes = rsa.Encrypt(data, false);
return Convert.ToBase64String(cipherbytes);
} MemoryStream plaiStream = new MemoryStream(data);
MemoryStream crypStream = new MemoryStream();
Byte[] buffer = new Byte[maxBlockSize];
int blockSize = plaiStream.Read(buffer, , maxBlockSize);
while (blockSize > )
{
Byte[] toEncrypt = new Byte[blockSize];
Array.Copy(buffer, , toEncrypt, , blockSize);
Byte[] cryptograph = rsa.Encrypt(toEncrypt, false);
crypStream.Write(cryptograph, , cryptograph.Length);
blockSize = plaiStream.Read(buffer, , maxBlockSize);
} return Convert.ToBase64String(crypStream.ToArray(), Base64FormattingOptions.None);
}
catch (Exception e)
{
e.Error();
return null;
}
}
2.RSA解密
public static string RSADecrypt(string content, string privateKeyPem, string charset = "UTF-8")
{
try
{
RSACryptoServiceProvider rsaCsp = LoadCertificateFile(privateKeyPem); if (string.IsNullOrEmpty(charset))
{
charset = "UTF-8";
}
byte[] data = Convert.FromBase64String(content);
int maxBlockSize = rsaCsp.KeySize / ; //解密块最大长度限制 if (data.Length <= maxBlockSize)
{
byte[] cipherbytes = rsaCsp.Decrypt(data, false);
return Encoding.GetEncoding(charset).GetString(cipherbytes);
} MemoryStream crypStream = new MemoryStream(data);
MemoryStream plaiStream = new MemoryStream();
Byte[] buffer = new Byte[maxBlockSize];
int blockSize = crypStream.Read(buffer, , maxBlockSize); while (blockSize > )
{
Byte[] toDecrypt = new Byte[blockSize];
Array.Copy(buffer, , toDecrypt, , blockSize);
Byte[] cryptograph = rsaCsp.Decrypt(toDecrypt, false);
plaiStream.Write(cryptograph, , cryptograph.Length);
blockSize = crypStream.Read(buffer, , maxBlockSize);
} return Encoding.GetEncoding(charset).GetString(plaiStream.ToArray());
}
catch
{
//e.Error();
return null;
}
}
3.RSA签名
/// <summary>
/// RSA签名
/// </summary>
/// <param name="data"></param>
/// <param name="privateKeyPem"></param>
/// <param name="charset"></param>
/// <returns></returns>
public static string RSASign(string data, string privateKeyPem, string charset)
{
RSACryptoServiceProvider rsaCsp = LoadCertificateFile(privateKeyPem);
byte[] dataBytes = null;
if (string.IsNullOrEmpty(charset))
{
dataBytes = Encoding.UTF8.GetBytes(data);
}
else
{
dataBytes = Encoding.GetEncoding(charset).GetBytes(data);
} byte[] signatureBytes = rsaCsp.SignData(dataBytes, "SHA1"); return Convert.ToBase64String(signatureBytes);
}
```
```
private static RSACryptoServiceProvider LoadCertificateFile(string privateKeyPem)
{
using (System.IO.FileStream fs = System.IO.File.OpenRead(privateKeyPem))
{
byte[] data = new byte[fs.Length];
string res = string.Empty;
fs.Read(data, , data.Length);
if (data[] != 0x30)
{
res = GetPem("RSA PRIVATE KEY", data);
}
try
{
RSACryptoServiceProvider rsa = DecodePemPrivateKey(res);
return rsa;
}
catch (Exception e)
{
e.Error();
return null;
} }
}
```
RSA签名验签
```
public static bool RSACheckContent(string signContent, string sign, string publicKeyPem, string charset)
{
try
{
string sPublicKeyPEM = File.ReadAllText(publicKeyPem);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.PersistKeyInCsp = false;
RSACryptoServiceProviderExtension.LoadPublicKeyPEM(rsa, sPublicKeyPEM);
SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();
if (string.IsNullOrEmpty(charset))
{
charset = DEFAULT_CHARSET;
}
bool bVerifyResultOriginal = rsa.VerifyData(Encoding.GetEncoding(charset).GetBytes(signContent), sha1, Convert.FromBase64String(sign));
return bVerifyResultOriginal;
}
catch(Exception e)
{
e.Error();
return false;
}
}
4.MD5加密
/// <summary>
/// MD5加密算法
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string MD5(String str, string encoder = "UTF8")
{
byte[] result = null;
byte[] inputbyt = null;
switch (encoder)
{
case "UTF8":
inputbyt = Encoding.UTF8.GetBytes(str);
break;
case "GBK":
inputbyt = Encoding.GetEncoding("GBK").GetBytes(str);
break;
default:
inputbyt = Encoding.GetEncoding("GB2312").GetBytes(str);
break;
}
result = ((HashAlgorithm)CryptoConfig.CreateFromName("MD5")).ComputeHash(inputbyt);
StringBuilder output = new StringBuilder();
for (int i = ; i < result.Length; i++)
{
output.Append((result[i]).ToString("x2", System.Globalization.CultureInfo.InvariantCulture));
}
return output.ToString();
}
C# RSA加解密和MD5加密的更多相关文章
- Node.js的DES加解密和MD5加密
		最基本的就是经常用的md5加密算法 代码如下 var MD5=function (data) { var _encrymd5 = require('crypto').createHas ... 
- rsa加解密的内容超长的问题解决
		一. 现象: 有一段老代码用来加密的,但是在使用key A的时候,抛出了异常:javax.crypto.IllegalBlockSizeException: Data must not be ... 
- Delphi RSA加解密【 (RSA公钥加密,私钥解密)、(RSA私钥加密,公钥解密)、MD5加密、SHA加密】
		作者QQ:(648437169) 点击下载➨delphi RSA加解密 [Delphi RSA加解密]支持 (RSA公钥加密,私钥解密).(RSA私钥加密,公钥解密).MD5加密.SHA1加密.SHA ... 
- 前后端java+vue 实现rsa 加解密与摘要签名算法
		RSA 加密.解密.签名.验签.摘要,前后端java+vue联调测试通过 直接上代码 // 注意:加密密文与签名都是唯一的,不会变化.// 注意:vue 端密钥都要带pem格式.java 不要带pem ... 
- Rsa加解密Java、C#、php通用代码  密钥转换工具
		之前发了一篇"TripleDes的加解密Java.C#.php通用代码",后面又有项目用到了Rsa加解密,还是在不同系统之间进行交互,Rsa在不同语言的密钥格式不一样,所以过程中主 ... 
- 【go语言】RSA加解密
		关于go语言的RSA加解密的介绍,这里有一篇文章,已经介绍的很完整了. 对应的go语言的加解密代码,参考git. 因为原文跨语言是跟php,我这里要跟c语言进行交互,所以,这里贴上c语言的例子. 参考 ... 
- java RSA加解密以及用途
		在公司当前版本的中间件通信框架中,为了防止非授权第三方和到期客户端的连接,我们通过AES和RSA两种方式的加解密策略进行认证.对于非对称RSA加解密,因为其性能耗费较大,一般仅用于认证连接,不会用于每 ... 
- openssl - rsa加解密例程
		原文链接: http://www.cnblogs.com/cswuyg/p/3187462.html openssl是可以很方便加密解密的库,可以使用它来对需要在网络中传输的数据加密.可以使用非对称加 ... 
- RSA加解密工具类RSAUtils.java,实现公钥加密私钥解密和私钥解密公钥解密
		package com.geostar.gfstack.cas.util; import org.apache.commons.codec.binary.Base64; import javax.cr ... 
随机推荐
- VR
- spring框架之依赖注入(DI)
			1. IOC和DI的概念 * IOC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!! * DI -- Dependency Injection,依赖注入,在 ... 
- WARNING [main] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [] milliseconds.
			编译安装tomcat-native和tomcat-deamon以后,发现toomcat启动很慢,好久才有响应.以下日志供参考: 11-Sep-2017 12:19:28.102 INFO [main] ... 
- Luogu 3953[NOIP2017] 逛公园 堆优化dijkstra + 记忆化搜索
			题解 首先肯定是要求出单源最短路的,我用了堆优化dijikstra ,复杂度 mlogm,值得拥有!(只不过我在定义优先队列时把greater 打成了 less调了好久 然后我们就求出了$i$到源点的 ... 
- NOIP 2016 游记
- 项目UML设计
			团队信息 队名:火箭少男100 本次作业课上成员 短学号 名 本次作业博客链接 2507 俞辛(临时队长) https://www.cnblogs.com/multhree/p/9821080.htm ... 
- 661. Image Smoother
			static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ... 
- sqlserver中怎么查询字段为空的记录
			sqlserver中怎么查询字段为空的记录的两种方法: 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https://cnblogs.com/qzf/ 
- 2018.06.29 NOIP模拟 1807(简单递推)
			1807 题目背景 SOURCE:NOIP2015-SHY-2 题目描述 给出一个由数字('0'-'9')构成的字符串.我们说一个子序列是好的,如果他的每一位都是 1.8.0.7 ,并且这四个数字按照 ... 
- Freetype字体引擎分析与指南
			Freetype字体引擎分析与指南,很不错的一篇教程,推荐!! 
