Reputation: 215
Here is some code that I have that works perfectly:
Sub EncryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String)
Dim fsInput As New FileStream(sInputFilename, _
FileMode.Open, FileAccess.Read)
Dim fsEncrypted As New FileStream(sOutputFilename, _
FileMode.Create, FileAccess.Write)
Dim DES As New DESCryptoServiceProvider()
'Set secret key for DES algorithm.
'A 64-bit key and an IV are required for this provider.
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
'Set the initialization vector.
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
'Create the DES encryptor from this instance.
Dim desencrypt As ICryptoTransform = DES.CreateEncryptor()
'Create the crypto stream that transforms the file stream by using DES encryption.
Dim cryptostream As New CryptoStream(fsEncrypted, _
desencrypt, _
CryptoStreamMode.Write)
'Read the file text to the byte array.
Dim bytearrayinput(fsInput.Length - 1) As Byte
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
'Write out the DES encrypted file.
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
cryptostream.Close()
End Sub
Is it possible to change the keysize and maybe even choose between MD5 and SHA1 encryption with this code? If not, can someone point me in the right direction to find some that does?
thanks
Simon
Upvotes: 0
Views: 928
Reputation: 1970
DES is an encryption algorithm. If you want to use something else you should look at the TripleDESCryptoServiceProvider, or the AesCryptoServiceProvider (in the System.Security.Cryptography namespace).
MD5 and SHA1 are actually hashing algorithms. Effectively they are special case one-way encryption algorithms that can not be decrypted (so I don't think they are what you are looking for).
Just looking at the documentation for TripleDES and Aes classes it looks like you should be able to replace the line:
Dim DES As New DESCryptoServiceProvider()
with any of the other CryptoServiceProvider classes that provides a CreateEncryptor function. They also support a KeySize property that you can set. You might try something like:
Sub EncryptFile(ByVal sInputFilename As String, _
ByVal sOutputFilename As String, _
ByVal sKey As String, _
ByVal keysize as integer, _
ByVal algorithm as String)
Dim fsInput As New FileStream(sInputFilename, _
FileMode.Open, FileAccess.Read)
Dim fsEncrypted As New FileStream(sOutputFilename, _
FileMode.Create, FileAccess.Write)
Dim algorithm As SymmetricAlgorithm
Select Case algorithm
Case "DES": algorithm = New DESCryptoServiceProvider()
Case "3DES": algorithm = New TripleDESCryptoServiceProvider()
Case "AES": algorithm = New AESCryptoServiceProvider()
End Select
algorithm.KeySize = keysize
'Set secret key for the algorithm.
'A 64-bit key and an IV are required for this provider.
algorithm.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
'Set the initialization vector.
algorithm.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
'Create the encryptor from this instance.
Dim desencrypt As ICryptoTransform = algorithm.CreateEncryptor()
'Create the crypto stream that transforms the file stream by using encryption.
Dim cryptostream As New CryptoStream(fsEncrypted, _
desencrypt, _
CryptoStreamMode.Write)
'Read the file text to the byte array.
Dim bytearrayinput(fsInput.Length - 1) As Byte
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length)
'Write out the DES encrypted file.
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length)
cryptostream.Close()
End Sub
I haven't tried to compile the above sample but that you get you started I hope.
Upvotes: 1