对称加密——DES
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace TGSMessage
{
class Message
{
//加密
private string Encrypt(string str, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Encoding.Default.GetBytes(str);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);// 密匙
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);// 初始化向量
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
var retB = Convert.ToBase64String(ms.ToArray());
return retB;
}
//解密
private string Decrypt(string pToDecrypt, string sKey)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
// 如果两次密匙不一样,这一步可能会引发异常
cs.FlushFinalBlock();
return System.Text.Encoding.Default.GetString(ms.ToArray());
}
static void Main(string[] args)
{
string text = "";
string message = "Hello World,Good afternoon!";
byte[] sKey = {1,2,3,4,5,6,7,8};
Console.WriteLine(sKey.Length);
string key = Encoding.ASCII.GetString(sKey);
Console.WriteLine(key);
for (int i = 0; i < sKey.Length; i++)
{
text += sKey[i].ToString();
}
Console.WriteLine(text);
Message msg = new Message();
string m = msg.Encrypt(message, text);
Console.WriteLine(m);
Console.WriteLine(msg.Decrypt(m, text));
}
}
}
非对称加密——RSA
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace TGSMessage
{
class Message
{
//RSA产生密钥
public string[] GenerateKeys()
{
string[] sKeys = new String[2];
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
sKeys[0] = rsa.ToXmlString(true); //私钥
sKeys[1] = rsa.ToXmlString(false); //公钥
return sKeys;
}
//RSA加密
public string EncryptString(string sSource, string sPublicKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
string plaintext = sSource; //明文
rsa.FromXmlString(sPublicKey); //公钥加密
byte[] cipherbytes; //byte类型密文
byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(plaintext), false);
StringBuilder sbString = new StringBuilder();
for (int i = 0; i < cipherbytes.Length; i++)
{
sbString.Append(cipherbytes[i] +",");
}
return sbString.ToString();
}
//RSA解密
public string DecryptString(String sSource, string sPrivateKey)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(sPrivateKey); //私钥解密
byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
string[] sBytes = sSource.Split(',');
for (int j = 0; j < sBytes.Length; j++)
{
if (sBytes[j] != "")
{
byteEn[j] = Byte.Parse(sBytes[j]);
}
}
byte[] plaintbytes = rsa.Decrypt(byteEn, false);
return Encoding.UTF8.GetString(plaintbytes);
}
public static void Main(string[] args)
{
Message msg = new Message();
string[] keys = msg.GenerateKeys();
foreach(string key in keys)
{
Console.WriteLine(key);
}
string text = "你好,中国";
string En_text = msg.EncryptString(text, keys[1]);
string De_text = msg.DecryptString(En_text, keys[0]);
Console.WriteLine(En_text);
Console.WriteLine(De_text);
}
}
}