在C# 中的AES加密算法
项目背景: 我要用C# 些WCF服务建立服务器端的程序、为安卓客户端提供访问端口,供安卓端和Oracle 、SQL Server 数据库对接执行SQL命令。
字符串的传输为了避免泄漏信息和SQL 注入攻击,采用AES加密算法传递字符串、并采用BASE 64 字符串转义来防止URL对特殊字符的异常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace AES_Dome
{
class Program
{
private static string key = "1234567890123456";//key,可自行修改
private static string iv = "0000000000000000"; //偏移量,可自行修改
static void Main(string[] args)
{
string encrytpData = Encrypt("SELECT * FROM [MesConfig].[dbo].[SYS_PROGRAM_NAME]", key, iv);
Console.WriteLine(encrytpData);
string B = encrytpData;
//PaddingMode
string decryptData = Decrypt(B, key, iv, PaddingMode.PKCS7);
Console.WriteLine("PKCS7 "+decryptData);
decryptData = Decrypt(B, key, iv, PaddingMode.ANSIX923);
Console.WriteLine("ISO10126 " + decryptData);
Console.ReadLine();
}
public static string Encrypt(string toEncrypt, string key, string iv)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
RijndaelManaged rDel = new RijndaelManaged();
rDel.BlockSize = 128;
rDel.KeySize = 256;
rDel.FeedbackSize = 128;
rDel.Padding = PaddingMode.PKCS7;
rDel.Key = keyArray;
rDel.IV = ivArray; //new byte[16]; //不采用密钥,默认采用16个0 ivArray;
rDel.Mode = CipherMode.CBC;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
public static string Decrypt(string toDecrypt, string key, string iv,PaddingMode PM)
{
try
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] ivArray = UTF8Encoding.UTF8.GetBytes(iv);
byte[] toEncryptArray = Convert.FromBase64String(toDecrypt