Imports System
Imports System.IO
Imports System.Text
Imports System.Security.Cryptography
Imports System.Configuration
''' <summary>
''' Custom Encryption Class
''' Author: Vishwa
''' Date :05/28/08
''' Purpose: To Encrypt and Decrypt the Data
''' Design Pattern : Singleton
''' </summary>
''' <remarks>
''' This class implements a Base 64 encryption and decryption Using Symetric
''' IMPT: Config File will contain 2 keys and its value - SymmetricType and SymmetricKey
''' </remarks>
Public NotInheritable Class RegCryptographer
Private Shared _instance As New RegCryptographer
#Region "Constructor"
Private Sub New()
End Sub
#End Region
#Region "Public Methods"
Public Shared Function DecryptQueryString(ByVal stringToDecrypt As String) As String
Return DecryptSymmetric(stringToDecrypt.Replace(" ", "+"))
End Function
Public Shared Function EncryptQueryString(ByVal stringToEncrypt As String) As String
Return EncryptSymmetric(stringToEncrypt)
End Function
#End Region
#Region "Custom Cryptography"
Private Shared _key() As Byte = {}
Private Shared _IV() As Byte = {}
Private Shared _symmetricKey As String = String.Empty
#Region "Rijndael Encryption/Decryption"
Public Shared Function DecryptSymmetric(ByVal stringToDecrypt As String) As String
If SymmetricType = "Rijndael" Then
Return DecryptSymmetricRijndael(stringToDecrypt)
Else
Return DecryptSymmetricDESC(stringToDecrypt)
End If
End Function
Public Shared Function EncryptSymmetric(ByVal stringToEncrypt As String) As String
If SymmetricType = "Rijndael" Then
Return EncryptSymmetricRijndael(stringToEncrypt)
Else
Return EncryptSymmetricDESC(stringToEncrypt)
End If
End Function
Private Shared Function DecryptSymmetricRijndael(ByVal stringToDecrypt As String) As String
Try
Dim inputByteArray(stringToDecrypt.Length) As Byte
Dim rijndael As New RijndaelManaged()
rijndael.GenerateIV()
'rijndael.GenerateKey()
'_key = rijndael.Key
_IV = rijndael.IV
rijndael.KeySize = 128
rijndael.BlockSize = 128
rijndael.Mode = CipherMode.ECB
rijndael.Padding = PaddingMode.PKCS7
_key = System.Text.Encoding.UTF32.GetBytes(SymmetricKey)
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim decryptor As ICryptoTransform = rijndael.CreateDecryptor(_key, _IV)
Dim msDecrypt As New MemoryStream()
Dim csDecrypt As New CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Write)
csDecrypt.Write(inputByteArray, 0, inputByteArray.Length)
csDecrypt.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(msDecrypt.ToArray())
Catch e As Exception
Return e.Message
End Try
End Function
Private Shared Function EncryptSymmetricRijndael(ByVal stringToEncrypt As String) As String
Try
Dim rijndael As New RijndaelManaged()
rijndael.GenerateIV()
'rijndael.GenerateKey()
'_key = rijndael.Key
_IV = rijndael.IV
_key = System.Text.Encoding.UTF32.GetBytes(SymmetricKey)
rijndael.KeySize = 128
rijndael.BlockSize = 128
rijndael.Mode = CipherMode.ECB
rijndael.Padding = PaddingMode.PKCS7
Dim encryptor As ICryptoTransform = rijndael.CreateEncryptor(_key, _IV)
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim msEncrypt As New MemoryStream()
Dim csEncrypt As New CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)
csEncrypt.Write(inputByteArray, 0, inputByteArray.Length)
csEncrypt.FlushFinalBlock()
Return Convert.ToBase64String(msEncrypt.ToArray())
Catch e As Exception
Return e.Message
End Try
End Function
#End Region
#Region "DESC Encryption/DeCryption"
Private Shared _symmetricType As String = String.Empty
Private Shared Function DecryptSymmetricDESC(ByVal stringToDecrypt As String) As String
Dim inputByteArray(stringToDecrypt.Length) As Byte
Try
inputByteArray = Convert.FromBase64String(stringToDecrypt)
Dim des As New DESCryptoServiceProvider()
des.GenerateIV()
_IV = des.IV
_key = System.Text.Encoding.UTF8.GetBytes(SymmetricKey)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateDecryptor(_key, _IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Dim encoding As System.Text.Encoding = System.Text.Encoding.UTF8
Return encoding.GetString(ms.ToArray())
Catch e As Exception
Return e.Message
End Try
End Function
Private Shared Function EncryptSymmetricDESC(ByVal stringToEncrypt As String) As String
Try
Dim des As New DESCryptoServiceProvider()
des.GenerateIV()
_IV = des.IV
_key = System.Text.Encoding.UTF8.GetBytes(SymmetricKey)
Dim inputByteArray() As Byte = Encoding.UTF8.GetBytes(stringToEncrypt)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(_key, _IV), CryptoStreamMode.Write)
cs.Write(inputByteArray, 0, inputByteArray.Length)
cs.FlushFinalBlock()
Return Convert.ToBase64String(ms.ToArray())
Catch e As Exception
Return e.Message
End Try
End Function
#End Region
#Region "Properties"
Private Shared ReadOnly Property SymmetricType() As String
Get
If String.IsNullOrEmpty(_symmetricType) Then
Try
_symmetricType = ConfigurationManager.AppSettings.Item("SymmetricType")
Catch ex As Exception
_symmetricType = "Rijndael"
End Try
If String.IsNullOrEmpty(_symmetricType) Then _symmetricType = "Rijndael"
End If
Return _symmetricType
End Get
End Property
Private Shared ReadOnly Property SymmetricKey() As String
Get
If String.IsNullOrEmpty(_symmetricKey) Then
Try
_symmetricKey = ConfigurationManager.AppSettings.Item("SymmetricKey")
Catch ex As Exception
_symmetricKey = "DIffTkey"
End Try
If String.IsNullOrEmpty(_symmetricKey) Then _symmetricKey = "DIffTkey"
End If
Return Left(_symmetricKey, 8)
End Get
End Property
#End Region
#End Region
End Class