asp.net实现rsa加密代码:
引入命名空间:using System.Security.Cryptography;
.cs代码:
以下为引用的内容:
/// <summary>
/// 随机生成密钥对
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btncreateMY_Click(object sender, EventArgs e)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
tbxcreateMY_publicKey.Text = rsa.ToXmlString(false);
tbxcreateMY_key.Text = rsa.ToXmlString(true);
}
/// <summary>
/// 生成密文
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, EventArgs e)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(tbxKey.Text);
byte[] source = System.Text.UTF8Encoding.UTF8.GetBytes(tbxContent.Text);
tbxSign.Text = Convert.ToBase64String(splitEncryptByte(source, rsa));
}
/// <summary>
/// 进行解密
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button3_Click(object sender, EventArgs e)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(tbxPublickeyYZ.Text);
byte[] source = Convert.FromBase64String(tbxContentYZ.Text);
tbxSignYZ.Text = System.Text.UTF8Encoding.UTF8.GetString(splitDecryptByte(source,rsa));
}
/// <summary>
/// 对原文进行分隔加密
/// </summary>
/// <param name="s"></param>
/// <param name="rsa"></param>
/// <returns></returns>
private byte[] splitEncryptByte(byte[] s,RSACryptoServiceProvider rsa)
{
int templength = s.Length;//原始明文长度
if (templength > 64)
{
//将原始明文扩展到64的整数倍
int mod = templength % 64;//求余
byte[] mbyte = new byte[templength + (64 - mod)];//扩展后的明文
for (int i = 0; i < templength; i++)//前半部分拷贝进来
{
mbyte[i] = s[i];
}
for (int i = templength; i < mbyte.Length; i++)//后半部分都填空格 asc 32
{
mbyte[i] = 32;
}
//开始分割明文
int div = mbyte.Length / 64;//每64个为一组对明文分组
if ((mbyte.Length % 64) != 0) div += 1;
byte[][] divbyte = new byte[div][];//存放分组明文
for (int i = 0; i < div; i++)
{
divbyte[i] = new byte[64];//每一个分割都是64长度
Array.Copy(mbyte, i * 64, divbyte[i], 0, 64);//拷贝到第i个分割数据中
}
byte[][] divencbyte = new byte[div][];//存放加密后的密文
for (int i = 0; i < div; i++)
{
divencbyte[i] = new byte[128];
divencbyte[i] = rsa.Encrypt(divbyte[i], false);
}
byte[] encbyte = new byte[div * 128];//拼装后的数组
for (int i = 0; i < div; i++)
{
Array.Copy(divencbyte[i], 0, encbyte, 128 * i, 128);
}
return encbyte;
}
else
{
return rsa.Encrypt(s, false);
}
}
/// <summary>
/// 对密文进行分隔解密
/// </summary>
/// <param name="EncryptToData"></param>
/// <param name="rsa"></param>
/// <returns></returns>
private byte[] splitDecryptByte(byte[] EncryptToData, RSACryptoServiceProvider rsa)
{
//分割密文
int div = EncryptToData.Length / 128;//每128个为一组对密文分组
if ((EncryptToData.Length % 128) != 0) div += 1;
if (div > 1)
{
byte[][] divbyte = new byte[div][];//存放分组密文
for (int i = 0; i < div; i++)
{
divbyte[i] = new byte[128];//每一个分割都是128长度
Array.Copy(EncryptToData, i * 128, divbyte[i], 0, 128);//拷贝到第i个分割数据中
}
//开始解密
byte[][] divdecbyte = new byte[div][];//存放解密后的明文
for (int i = 0; i < div; i++)
{
divdecbyte[i] = new byte[64];
divdecbyte[i] = rsa.Decrypt(divbyte[i], false);
}
//解密完毕
//开始拼装
byte[] decbyte = new byte[div * 64];//拼装后的数组
for (int i = 0; i < div; i++)
{
Array.Copy(divdecbyte[i], 0, decbyte, 64 * i, 64);
}
//拼装完毕
return decbyte;
}
else
{
return rsa.Decrypt(EncryptToData, false);
}
}
html代码:
以下为引用的内容:
<form id="form1" runat="server">
随机生成密钥:<asp:Button ID="btncreateMY" runat="server" Text="随机生成密钥" OnClick="btncreateMY_Click" /><br />
公钥:<asp:TextBox ID="tbxcreateMY_publicKey" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox><br />
私钥:<asp:TextBox ID="tbxcreateMY_key" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="710px"></asp:TextBox><br /><hr />
<br />
生成密文:<br />
原文:
<asp:TextBox ID="tbxContent" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox> <br />
公钥:
<asp:TextBox ID="tbxKey" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />
密文:
<asp:TextBox ID="tbxSign" runat="server" TextMode="MultiLine" Height="59px" ReadOnly="True" Width="711px"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="生成加密 " />
<br />
<br /><hr />
<br />
解密密文:<br />
密文:<asp:TextBox ID="tbxContentYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />
私钥:<asp:TextBox ID="tbxPublickeyYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox><br />
原文:<asp:TextBox ID="tbxSignYZ" runat="server" TextMode="MultiLine" Height="59px" Width="711px"></asp:TextBox>
<br />
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="进行解密" />
</form>