A Simple Decrypt Function

First Add This Namespaces

using System;
using System.Collections.Generic;
using System.Text;
using System.Security;
using System.Security.Cryptography;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.IO;
using System.Windows.Forms;


Now The Function:

public void Decrypt(string inputfile,string outputfile,string passPhrase,string saltValue,string hashAlgorithm,int passwordIterations,string initVector,int keySize)
       {
           // Convert strings defining encryption key characteristics into byte
           // arrays. Let us assume that strings only contain ASCII codes.
           // If strings include Unicode characters, use Unicode, UTF7, or UTF8
           // encoding.
           byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
           byte[] saltValueBytes = Encoding.ASCII.GetBytes(saltValue);

           // Convert our ciphertext into a byte array.
           byte[] cipherTextBytes = ReadByteArrayFromFile(inputfile);

           // First, we must create a password, from which the key will be 
           // derived. This password will be generated from the specified 
           // passphrase and salt value. The password will be created using
           // the specified hash algorithm. Password creation can be done in
           // several iterations.
           PasswordDeriveBytes password = new PasswordDeriveBytes(
                                                           passPhrase,
                                                           saltValueBytes,
                                                           hashAlgorithm,
                                                           passwordIterations);

           // Use the password to generate pseudo-random bytes for the encryption
           // key. Specify the size of the key in bytes (instead of bits).
           byte[] keyBytes = password.GetBytes(keySize / 8);

           // Create uninitialized Rijndael encryption object.
           RijndaelManaged symmetricKey = new RijndaelManaged();

           // It is reasonable to set encryption mode to Cipher Block Chaining
           // (CBC). Use default options for other symmetric key parameters.
           symmetricKey.Mode = CipherMode.CBC;

           // Generate decryptor from the existing key bytes and initialization 
           // vector. Key size will be defined based on the number of the key 
           // bytes.
           ICryptoTransform decryptor = symmetricKey.CreateDecryptor(
                                                            keyBytes,
                                                            initVectorBytes);

           // Define memory stream which will be used to hold encrypted data.
           MemoryStream memoryStream = new MemoryStream(cipherTextBytes);

           // Define cryptographic stream (always use Read mode for encryption).
           CryptoStream cryptoStream = new CryptoStream(memoryStream,
                                                         decryptor,
                                                         CryptoStreamMode.Read);

           // Since at this point we don't know what the size of decrypted data
           // will be, allocate the buffer long enough to hold ciphertext;
           // plaintext is never longer than ciphertext.
           byte[] plainTextBytes = new byte[cipherTextBytes.Length];

           // Start decrypting.
           int decryptedByteCount = cryptoStream.Read(plainTextBytes,
                                                      0,
                                                      plainTextBytes.Length);

           // Close both streams.
           memoryStream.Close();
           cryptoStream.Close();


           File.WriteAllBytes(outputfile,plainTextBytes);

           // Convert decrypted data into a string. 
           // Let us assume that the original plaintext string was UTF8-encoded.
           //string plainText = Encoding.UTF8.GetString(plainTextBytes,
                                                      //0,
                                                      //decryptedByteCount);

           // Return decrypted string.   
           //return plainText;
       }

转载于:https://www.cnblogs.com/samblog/archive/2012/04/01/2428763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值