CraigWardman.com

[ Using .NET TripleDES Crypto Provider ]

/Blog/Post

A catalogue of my discoveries in software development and related subjects, that I think might be of use or interest to everyone else, or to me when I forget what I did!

Using .NET TripleDES Crypto Provider

Thursday, 28 August 2008


I recently wrote a wrapper class implementing the .NET System.Security.Cryptography.TripleDESCryptoServiceProvider to quickly allow you to encrypt a plaintext string and return the Base64 encoded string of the encrypted bytes created by the TripleDES cipher (and decrypt that string back to plaintext!).

This provides a very simple way to encrypt and decrypt your data without the need to store it as a binary image.

The VB.NET code is shown below:


Public Class TripleDES
Private _k, _iv As Byte()

Public Sub New(ByVal key As Byte(), ByVal iv As Byte())
_k = key
_iv = iv
End Sub

Public Property Key() As Byte()
Get
Return _k
End Get
Set(ByVal value As Byte())
_k = value
End Set
End Property

Public Property IV() As Byte()
Get
Return _iv
End Get
Set(ByVal value As Byte())
_iv = value
End Set
End Property

Public Function Encrypt(ByVal plaintext As String) As String
Dim cipher As New System.Security.Cryptography.TripleDESCryptoServiceProvider()
cipher.BlockSize = 64

Dim cipherText As String
Using cipherTextStream As New IO.MemoryStream()
Using cryptoStream As New System.Security.Cryptography.CryptoStream(cipherTextStream, cipher.CreateEncryptor(_k, _iv), System.Security.Cryptography.CryptoStreamMode.Write)
Dim bytes As Byte() = Text.Encoding.UTF8.GetBytes(plaintext)
cryptoStream.Write(bytes, 0, bytes.Length)
cryptoStream.FlushFinalBlock()

cipherText = Convert.ToBase64String(cipherTextStream.ToArray())
End Using
End Using

Return cipherText

End Function

Public Function Decrypt(ByVal ciphertext As String) As String
Dim cipher As New System.Security.Cryptography.TripleDESCryptoServiceProvider()
cipher.BlockSize = 64

Dim plaintext As String
Using plaintextStream As New IO.MemoryStream()
Using cryptoStream As New System.Security.Cryptography.CryptoStream(plaintextStream, cipher.CreateDecryptor(_k, _iv), System.Security.Cryptography.CryptoStreamMode.Write)
Dim bytes As Byte() = Convert.FromBase64String(ciphertext)
cryptoStream.Write(bytes, 0, bytes.Length)
cryptoStream.FlushFinalBlock()

plaintext = Text.Encoding.UTF8.GetString(plaintextStream.ToArray())
End Using
End Using

Return plaintext

End Function
End Class


To use it, simply instanciate it with your Key and Initialization Vector. Make sure your K and IV are the same when decrypting data you encrypted with them!

Labels: ,

Share This!



0 Comments:

Post a Comment

<< Home

CraigWardman.com