RSA:
//待加密的明文
string originText;
//公钥
string publicKey;
byte[] cryp_byte;
RSACryptoServiceProvider rsaReceive = new RSACryptoServiceProvider();
RSACryptoServiceProvider rsaSend = new RSACryptoServiceProvider();
加密:
originText ="???";
//接收方先生成公钥, 并将此公钥公开
//参数false 表示只生成公钥, 如果为true, 则同时生成公钥和私钥.
publicKey = rsaReceive.ToXmlString(false);
//发送方接收公钥, 并用此公钥加密数据
rsaSend.FromXmlString(publicKey);
//发送方执行加密.
//第二个参数指示是否使用OAEP, 如果使用, 则程序必须运行在Windows XP 及以上版本的
//系统中. 无论true 或false, 解密时必须跟加密时的选择相同.
cryp_byte= rsaSend.Encrypt(System.Text.Encoding.UTF8.GetBytes(originText), false);
data_encyp.Text = Encoding.Default.GetString(cryp_byte);
//接收方用自己的私钥解密
解密:
byte[] b_OriginText = rsaReceive.Decrypt(cryp_byte, false);
SHA_1做hash:
HashAlgorithm sha1_hash=HashAlgorithm.Create();
byte[] hash_byte=sha1_hash.ComputeHash(byte[] bytes);
AES对称加密(C#实现类Rijndael):
加密:
//获取实例
Rijndael ser_rjdcrypt = Rijndael.Create();
//内存流
MemoryStream encryptStream = new MemoryStream();
//加密流
CryptoStream csWrite = new CryptoStream(encryptStream, ser_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
//读写流
StreamWriter sw = new StreamWriter(csWrite);
sw.WriteLine(str_temp);
sw.Flush();
//填充末端并且象内存流写入清空加密流
csWrite.FlushFinalBlock();
Byte[] sendbuffer = new Byte[encryptStream.Length];
encryptStream.Position = 0;
encryptStream.Read(sendbuffer, 0, (int)encryptStream.Length);
String msg=BitConverter.ToString(sendbuffer);
解密:
String[] lt_rvstr_msg = msg.Split('-');
Byte[] lt_rvbyte_msg = new Byte[lt_rvstr_msg.Length];
for (int index = 0; index < lt_rvstr_msg.Length; index++)
{
lt_rvbyte_msg[index] = byte.Parse(lt_rvstr_msg[index], System.Globalization.NumberStyles.HexNumber);
}
//-----------------------------------------------------------------------//
MemoryStream decryptStream = new MemoryStream();
CryptoStream decStream = new CryptoStream(decryptStream, ser_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
try
{
decStream.Write(lt_rvbyte_msg, 0, lt_rvbyte_msg.Length);
decStream.FlushFinalBlock();
decryptByte = decryptStream.ToArray();
}
catch (Exception err)
{ }
Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
for (int i = 0; i < decryptByte.Length - 2; i++)
{
zh_dec_byte[i] = decryptByte[i];
}
String yuanwen= Encoding.Default.GetString(zh_dec_byte));
另一个例子:
private void but_enc_Click(object sender, EventArgs e)
{
String str_temp = this.tx_enc.Text;
tx_jieguo.AppendText("加密前:"+BitConverter.ToString(Encoding.Default.GetBytes(str_temp))+"/n");
MemoryStream encryptStream = new MemoryStream();
CryptoStream csWrite = new CryptoStream(encryptStream, cli_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(csWrite);
sw.WriteLine(str_temp);
sw.Flush();
csWrite.FlushFinalBlock();
sendBuffer = new Byte[encryptStream.Length];
encryptStream.Position = 0;
encryptStream.Read(sendBuffer, 0, (int)encryptStream.Length);
tx_jieguo.AppendText("加密后:"+BitConverter.ToString(sendBuffer) + "/n");
}
private void but_dec_Click(object sender, EventArgs e)
{
Rijndael dec_rjdcrypt = Rijndael.Create();
dec_rjdcrypt.Key = cli_rjdcrypt.Key;
dec_rjdcrypt.IV = cli_rjdcrypt.IV;
MemoryStream decryptStream = new MemoryStream();
CryptoStream decStream = new CryptoStream(decryptStream, dec_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
try
{
decStream.Write(sendBuffer, 0, sendBuffer.Length);
decStream.FlushFinalBlock();
decryptByte = decryptStream.ToArray();
}
catch(Exception err)
{
}
tx_jieguo.AppendText("解密后:"+BitConverter.ToString(decryptByte) + "/n");
Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
for (int i = 0; i < decryptByte.Length - 2;i++ )
{
zh_dec_byte[i] = decryptByte[i];
}
int i_length = decryptByte.Length;
tx_jieguo.AppendText("恢复:" + Encoding.Default.GetString(decryptByte)+ "/n");
}
AES文件加密解密:
Rijndael crypt=Rijndel.create();
private void cmdWriteFile_click()
{
ICryptoTransform transform=crypt.CreateEncryptor();
FileStream fs=new FileStream("c://testfile.bin",FileMode.Create);
CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Write);
StreamWriter w=new StreamWriter(cs);
w.Write(txt.Text);
w.flush();
cs.flushFinalBlock();
w.close;
}
Private void cmdReadFile_click()
{
ICryptoTransform transform=crypt.CreateEncryptor();
FileStream fs=new FileStream("c://testfile.bin",FileMode.Open);
CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Read);
StreamRead wr=new StreamRead(cs);
String text=r.ReadToEnd();
r.close();
}
//待加密的明文
string originText;
//公钥
string publicKey;
byte[] cryp_byte;
RSACryptoServiceProvider rsaReceive = new RSACryptoServiceProvider();
RSACryptoServiceProvider rsaSend = new RSACryptoServiceProvider();
加密:
originText ="???";
//接收方先生成公钥, 并将此公钥公开
//参数false 表示只生成公钥, 如果为true, 则同时生成公钥和私钥.
publicKey = rsaReceive.ToXmlString(false);
//发送方接收公钥, 并用此公钥加密数据
rsaSend.FromXmlString(publicKey);
//发送方执行加密.
//第二个参数指示是否使用OAEP, 如果使用, 则程序必须运行在Windows XP 及以上版本的
//系统中. 无论true 或false, 解密时必须跟加密时的选择相同.
cryp_byte= rsaSend.Encrypt(System.Text.Encoding.UTF8.GetBytes(originText), false);
data_encyp.Text = Encoding.Default.GetString(cryp_byte);
//接收方用自己的私钥解密
解密:
byte[] b_OriginText = rsaReceive.Decrypt(cryp_byte, false);
SHA_1做hash:
HashAlgorithm sha1_hash=HashAlgorithm.Create();
byte[] hash_byte=sha1_hash.ComputeHash(byte[] bytes);
AES对称加密(C#实现类Rijndael):
加密:
//获取实例
Rijndael ser_rjdcrypt = Rijndael.Create();
//内存流
MemoryStream encryptStream = new MemoryStream();
//加密流
CryptoStream csWrite = new CryptoStream(encryptStream, ser_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
//读写流
StreamWriter sw = new StreamWriter(csWrite);
sw.WriteLine(str_temp);
sw.Flush();
//填充末端并且象内存流写入清空加密流
csWrite.FlushFinalBlock();
Byte[] sendbuffer = new Byte[encryptStream.Length];
encryptStream.Position = 0;
encryptStream.Read(sendbuffer, 0, (int)encryptStream.Length);
String msg=BitConverter.ToString(sendbuffer);
解密:
String[] lt_rvstr_msg = msg.Split('-');
Byte[] lt_rvbyte_msg = new Byte[lt_rvstr_msg.Length];
for (int index = 0; index < lt_rvstr_msg.Length; index++)
{
lt_rvbyte_msg[index] = byte.Parse(lt_rvstr_msg[index], System.Globalization.NumberStyles.HexNumber);
}
//-----------------------------------------------------------------------//
MemoryStream decryptStream = new MemoryStream();
CryptoStream decStream = new CryptoStream(decryptStream, ser_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
try
{
decStream.Write(lt_rvbyte_msg, 0, lt_rvbyte_msg.Length);
decStream.FlushFinalBlock();
decryptByte = decryptStream.ToArray();
}
catch (Exception err)
{ }
Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
for (int i = 0; i < decryptByte.Length - 2; i++)
{
zh_dec_byte[i] = decryptByte[i];
}
String yuanwen= Encoding.Default.GetString(zh_dec_byte));
另一个例子:
private void but_enc_Click(object sender, EventArgs e)
{
String str_temp = this.tx_enc.Text;
tx_jieguo.AppendText("加密前:"+BitConverter.ToString(Encoding.Default.GetBytes(str_temp))+"/n");
MemoryStream encryptStream = new MemoryStream();
CryptoStream csWrite = new CryptoStream(encryptStream, cli_rjdcrypt.CreateEncryptor(), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(csWrite);
sw.WriteLine(str_temp);
sw.Flush();
csWrite.FlushFinalBlock();
sendBuffer = new Byte[encryptStream.Length];
encryptStream.Position = 0;
encryptStream.Read(sendBuffer, 0, (int)encryptStream.Length);
tx_jieguo.AppendText("加密后:"+BitConverter.ToString(sendBuffer) + "/n");
}
private void but_dec_Click(object sender, EventArgs e)
{
Rijndael dec_rjdcrypt = Rijndael.Create();
dec_rjdcrypt.Key = cli_rjdcrypt.Key;
dec_rjdcrypt.IV = cli_rjdcrypt.IV;
MemoryStream decryptStream = new MemoryStream();
CryptoStream decStream = new CryptoStream(decryptStream, dec_rjdcrypt.CreateDecryptor(), CryptoStreamMode.Write);
try
{
decStream.Write(sendBuffer, 0, sendBuffer.Length);
decStream.FlushFinalBlock();
decryptByte = decryptStream.ToArray();
}
catch(Exception err)
{
}
tx_jieguo.AppendText("解密后:"+BitConverter.ToString(decryptByte) + "/n");
Byte[] zh_dec_byte = new Byte[decryptByte.Length - 2];
for (int i = 0; i < decryptByte.Length - 2;i++ )
{
zh_dec_byte[i] = decryptByte[i];
}
int i_length = decryptByte.Length;
tx_jieguo.AppendText("恢复:" + Encoding.Default.GetString(decryptByte)+ "/n");
}
AES文件加密解密:
Rijndael crypt=Rijndel.create();
private void cmdWriteFile_click()
{
ICryptoTransform transform=crypt.CreateEncryptor();
FileStream fs=new FileStream("c://testfile.bin",FileMode.Create);
CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Write);
StreamWriter w=new StreamWriter(cs);
w.Write(txt.Text);
w.flush();
cs.flushFinalBlock();
w.close;
}
Private void cmdReadFile_click()
{
ICryptoTransform transform=crypt.CreateEncryptor();
FileStream fs=new FileStream("c://testfile.bin",FileMode.Open);
CryptoSteam cs=new CryptoStream(fs,transform,CryptoStreamMode.Read);
StreamRead wr=new StreamRead(cs);
String text=r.ReadToEnd();
r.close();
}