/// <summary> /// 加密 参数:string /// </summary> /// <param name="palinData">明文</param> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <param name="encodingType">编码方式</param> /// <returns>string:密文</returns> //public static string Encrypt(string palinData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) public string Encrypt(string palinData, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) { if (palinData != null) { string key = key_def; string iv = key_def; if (string.IsNullOrWhiteSpace(palinData)) { return(null); } if (!(CheckKey(key) && CheckIv(iv))) { return(palinData); } byte[] toEncryptArray = EncodingStrOrByte.GetBytes(palinData, encodingType); var rm = new RijndaelManaged { IV = EncodingStrOrByte.GetBytes(iv, encodingType), Key = EncodingStrOrByte.GetBytes(key, encodingType), Mode = CipherMode.ECB, Padding = PaddingMode.Zeros }; ICryptoTransform cTransform = rm.CreateEncryptor(); byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); return(Convert.ToBase64String(resultArray, 0, resultArray.Length)); } else { return(null); } }
/// <summary> /// 加密 参数:byte[] /// </summary> /// <param name="palinData">明文</param> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <returns>密文</returns> public byte[] Encrypt(byte[] palinData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) { if (palinData == null) { return(null); } if (!(CheckKey(key) && CheckIv(iv))) { return(palinData); } byte[] bKey = new byte[32]; Array.Copy(EncodingStrOrByte.GetBytes(key.PadRight(bKey.Length), encodingType), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(EncodingStrOrByte.GetBytes(iv.PadRight(bVector.Length), encodingType), bVector, bVector.Length); byte[] cryptograph = null; // 加密后的密文 Rijndael Aes = Rijndael.Create(); // 开辟一块内存流 using (MemoryStream Memory = new MemoryStream()) { // 把内存流对象包装成加密流对象 using (CryptoStream Encryptor = new CryptoStream(Memory, Aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write)) { // 明文数据写入加密流 Encryptor.Write(palinData, 0, palinData.Length); Encryptor.FlushFinalBlock(); cryptograph = Memory.ToArray(); } } return(cryptograph); }
/// <summary> /// 解密 参数:byte[] /// </summary> /// <param name="encryptedData">被解密的密文</param> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <returns>明文</returns> public byte[] Decrypt(byte[] encryptedData, string key, string iv, EncodingStrOrByte.EncodingType encodingType = EncodingStrOrByte.EncodingType.UTF8) { if (encryptedData == null) { return(null); } if (!(CheckKey(key) && CheckIv(iv))) { return(encryptedData); } byte[] bKey = new byte[32]; Array.Copy(EncodingStrOrByte.GetBytes(key.PadRight(bKey.Length), encodingType), bKey, bKey.Length); byte[] bVector = new byte[16]; Array.Copy(EncodingStrOrByte.GetBytes(iv.PadRight(bVector.Length), encodingType), bVector, bVector.Length); byte[] original = null; // 解密后的明文 Rijndael Aes = Rijndael.Create(); // 开辟一块内存流,存储密文 using (MemoryStream Memory = new MemoryStream(encryptedData)) { // 把内存流对象包装成加密流对象 using (CryptoStream Decryptor = new CryptoStream(Memory, Aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read)) { // 明文存储区 using (MemoryStream originalMemory = new MemoryStream()) { byte[] Buffer = new byte[1024]; int readBytes = 0; while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0) { originalMemory.Write(Buffer, 0, readBytes); } original = originalMemory.ToArray(); } } } return(original); }