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 ...
随机推荐
- Ubuntu cd
查看目录文件内容 ./ or filename/file.* cd 返回用户主目录 ~,,,,,/home/user cd ..不管用 cd / 返回用户根目录 root
- 20-java 对象链表空没空呢
写了一个 对象链表,往里面add了一些对象,最后我想看下链表是否为空,用 == null 为假,也看不出, 看下长度? 好吧, size() = 1: 打印 null , 那到底是不是空 啊, ...
- AOP不起作用的原因之一
在-servlet.xml配置context:component-scan后,Spring在扫描包时,会将所有带 @Service注解的类都扫描到容器中.而-servlet.xml和applicati ...
- 【hh】我胡汉三又回来了
hh 差不多半年没来机房了,高一的都已经碾压我100题了 开始得比较晚,估计比高一的早两三个月吧,停了这半年落下了不少. 但是没有关系啊,学OI纯粹是好玩嘛,一开始报名的时候根本不知道有联赛这回事(其 ...
- 01 Linux 网络配置和克隆
Linux 网络配置和克隆 一.配置 Linux 网络 当在 VMware 中安装完 Linux 以后需要通过一些网络配置才能使 Linux 能够连能网络: 首先如果是在虚拟机上安装的 Linux 必 ...
- a标签的四个伪类
A标签的css样式 CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link :v ...
- 2018.10.18 NOIP训练 01矩阵(组合数学)
传送门 组合数学好题. 题目要求输出的结果成功把概率转化成了种类数. 本来可以枚举统计最小值为iii时的概率. 现在只需要统计最小值为iii时的方案数,每一行有不少于iii个1的方案数. 显然一行选i ...
- 2018.09.19 atcoder AtCoDeer and Rock-Paper(贪心)
传送门 sb贪心啊. 显然能选帕子就选帕子. 首先假设第一个人全出石头. 考虑把一些石头修改成帕子. 这样贡献只增不减,加起来就是答案. 代码: #include<bits/stdc++.h&g ...
- 2018.09.17 bzoj1260: [CQOI2007]涂色paint(区间dp)
传送门 区间dp简单题啊. 很显然用f[l][r]f[l][r]f[l][r]表示把区间[l,r][l,r][l,r]按要求染好的代价. 这样可以O(n)O(n)O(n)枚举断点转移了啊. 显然如果断 ...
- 2018.08.12 bzoj5301: [Cqoi2018]异或序列(前缀和+莫队)
传送门 简单的异或前缀和处理+莫队统计答案. 惊奇的发现无论开不开long long都能跑过... 代码: #include<bits/stdc++.h> #define N 100005 ...