コード例 #1
0
        public string Encrypt <T>(string keyString, T value)
        {
            if (string.IsNullOrWhiteSpace(keyString))
            {
                throw new ArgumentNullException(nameof(keyString));
            }

            string plainText = HelperFunc.ChangeType <string>(value);

            if (string.IsNullOrWhiteSpace(plainText))
            {
                throw new ArgumentNullException(nameof(value));
            }

            // Create an Aes object with the specified key
            using Aes aesAlg = Aes.Create();
            aesAlg.Key       = Encoding.UTF8.GetBytes(keyString);

            // Create an encryptor to perform the stream transform.
            using ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
            // Create the streams used for encryption.
            using MemoryStream msEncrypt = new MemoryStream();
            using CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
            {
                //Write all data to the stream.
                swEncrypt.Write(plainText);
            }
            byte[] encryptedContent = msEncrypt.ToArray();
            byte[] result           = new byte[aesAlg.IV.Length + encryptedContent.Length];
            Buffer.BlockCopy(aesAlg.IV, 0, result, 0, aesAlg.IV.Length);
            Buffer.BlockCopy(encryptedContent, 0, result, aesAlg.IV.Length, encryptedContent.Length);
            return(Convert.ToBase64String(result));
        }
コード例 #2
0
        public T Decrypt <T>(string keyString, string cipherText)
        {
            if (string.IsNullOrWhiteSpace(keyString))
            {
                throw new ArgumentNullException(nameof(keyString));
            }

            if (string.IsNullOrWhiteSpace(cipherText))
            {
                throw new ArgumentNullException(nameof(cipherText));
            }

            byte[] fullCipher = Convert.FromBase64String(cipherText);

            var iv     = new byte[16];
            var cipher = new byte[fullCipher.Length - iv.Length];

            Buffer.BlockCopy(fullCipher, 0, iv, 0, iv.Length);
            Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, fullCipher.Length - iv.Length);
            var key = Encoding.UTF8.GetBytes(keyString);

            // Create an Aes object with the specified key
            using Aes aesAlg = Aes.Create();
            aesAlg.Key       = Encoding.UTF8.GetBytes(keyString);

            // Create a decryptor to perform the stream transform.
            using ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, iv);
            string plainText;

            // Create the streams used for decryption.
            using (MemoryStream msDecrypt = new MemoryStream(cipher))
            {
                using CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
                // Read the decrypted bytes from the decrypting stream
                // and place them in a string.
                using StreamReader srDecrypt = new StreamReader(csDecrypt);
                plainText = srDecrypt.ReadToEnd();
            }
            //Return Plain Text
            return(HelperFunc.ChangeType <T>(plainText));
        }