public static ICryptoTransform CreateEncryptor(string key, CryptionType type) { ICryptoTransform transform; SHA512 sha512 = new SHA512CryptoServiceProvider(); var bytes = sha512.ComputeHash(Sha1(key).ToAsciiBytes()); switch (type) { case CryptionType.Aes: var aes = Rijndael.Create(); aes.Mode = CipherMode.CBC; transform = aes.CreateEncryptor(bytes.Skip(17).Take(32).ToArray(), bytes.Skip(17).Take(16).ToArray()); aes.Clear(); break; case CryptionType.Des: var des = new DESCryptoServiceProvider { Mode = CipherMode.CBC }; transform = des.CreateEncryptor(bytes.Skip(17).Take(8).ToArray(), bytes.Skip(17).Take(16).ToArray()); des.Clear(); break; default: var tripleDes = new TripleDESCryptoServiceProvider { Mode = CipherMode.CBC }; transform = tripleDes.CreateEncryptor(bytes.Skip(17).Take(24).ToArray(), bytes.Skip(17).Take(16).ToArray()); tripleDes.Clear(); break; } return transform; }
/// <summary> /// 加密成base64字符串 /// </summary> /// <param name="plainStr"></param> /// <param name="key"></param> /// <param name="type"></param> /// <returns></returns> public static string Encrypt2Base64(string plainStr, string key, CryptionType type) { var byteArray = plainStr.ToUtf8Bytes(); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, BaseCryption.CreateEncryptor(key, type), CryptoStreamMode.Write); cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); var encrypt = mStream.ToArray().Bytes2Base64(); cStream.Close(); return encrypt; }
/// <summary> /// 从nase64字符串解密 /// </summary> /// <param name="base64"></param> /// <param name="key"></param> /// <param name="type"></param> /// <returns></returns> public static string DecryptFromBase64(string base64, string key, CryptionType type) { var byteArray = base64.Base64ToBytes(); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, BaseCryption.CreateDecryptor(key, type), CryptoStreamMode.Write); cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); var decrypt = mStream.ToArray().FromUtf8Bytes(); cStream.Close(); return decrypt; }
/// <summary> /// 从16进制字符串解密 /// </summary> /// <param name="encryptStr"></param> /// <param name="key"></param> /// <param name="type"></param> /// <returns></returns> public static string Decrypt(string encryptStr, string key, CryptionType type) { var byteArray = encryptStr.Hex2Bytes(); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, BaseCryption.CreateDecryptor(key, type), CryptoStreamMode.Write); cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); var decrypt = Encoding.UTF8.GetString(mStream.ToArray()); cStream.Close(); return decrypt; }