diff --git a/RDSFactor/Crypto.vb b/RDSFactor/Crypto.vb deleted file mode 100644 index e9afa98..0000000 --- a/RDSFactor/Crypto.vb +++ /dev/null @@ -1,344 +0,0 @@ -Imports System -Imports System.IO -Imports System.Security.Cryptography - -' -' encrypt/decrypt functions -' Parameter checks and error handling -' are ommited for better readability -' - -Public Class EncDec - ' Encrypt a byte array into a byte array using a key and an IV - Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte() - ' Create a MemoryStream to accept the encrypted bytes - Dim ms As New MemoryStream() - - ' Create a symmetric algorithm. - ' We are going to use Rijndael because it is strong and - ' available on all platforms. - ' You can use other algorithms, to do so substitute the - ' next line with something like - ' TripleDES alg = TripleDES.Create(); - Dim alg As Rijndael = Rijndael.Create() - - ' Now set the key and the IV. - ' We need the IV (Initialization Vector) because - ' the algorithm is operating in its default - ' mode called CBC (Cipher Block Chaining). - ' The IV is XORed with the first block (8 byte) - ' of the data before it is encrypted, and then each - ' encrypted block is XORed with the - ' following block of plaintext. - ' This is done to make encryption more secure. - - ' There is also a mode called ECB which does not need an IV, - ' but it is much less secure. - alg.Key = Key - alg.IV = IV - - ' Create a CryptoStream through which we are going to be - ' pumping our data. - ' CryptoStreamMode.Write means that we are going to be - ' writing data to the stream and the output will be written - ' in the MemoryStream we have provided. - Dim cs As New CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write) - - ' Write the data and make it do the encryption - cs.Write(clearData, 0, clearData.Length) - - ' Close the crypto stream (or do FlushFinalBlock). - ' This will tell it that we have done our encryption and - ' there is no more data coming in, - ' and it is now a good time to apply the padding and - ' finalize the encryption process. - cs.Close() - - ' Now get the encrypted data from the MemoryStream. - ' Some people make a mistake of using GetBuffer() here, - ' which is not the right way. - Dim encryptedData As Byte() = ms.ToArray() - - Return encryptedData - End Function - - ' Encrypt a string into a string using a password - ' Uses Encrypt(byte[], byte[], byte[]) - - Public Shared Function Encrypt(ByVal clearText As String, ByVal Password As String) As String - ' First we need to turn the input string into a byte array. - Dim clearBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(clearText) - - ' Then, we need to turn the password into Key and IV - ' We are using salt to make it harder to guess our key - ' using a dictionary attack - - ' trying to guess a password by enumerating all possible words. - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - - ' Now get the key/IV and do the encryption using the - ' function that accepts byte arrays. - ' Using PasswordDeriveBytes object we are first getting - ' 32 bytes for the Key - ' (the default Rijndael key length is 256bit = 32bytes) - ' and then 16 bytes for the IV. - ' IV should always be the block size, which is by default - ' 16 bytes (128 bit) for Rijndael. - ' If you are using DES/TripleDES/RC2 the block size is - ' 8 bytes and so should be the IV size. - ' You can also read KeySize/BlockSize properties off - ' the algorithm to find out the sizes. - Dim encryptedData As Byte() = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16)) - - ' Now we need to turn the resulting byte array into a string. - ' A common mistake would be to use an Encoding class for that. - 'It does not work because not all byte values can be - ' represented by characters. - ' We are going to be using Base64 encoding that is designed - 'exactly for what we are trying to do. - Return Convert.ToBase64String(encryptedData) - - End Function - - ' Encrypt bytes into bytes using a password - ' Uses Encrypt(byte[], byte[], byte[]) - - Public Shared Function Encrypt(ByVal clearData As Byte(), ByVal Password As String) As Byte() - ' We need to turn the password into Key and IV. - ' We are using salt to make it harder to guess our key - ' using a dictionary attack - - ' trying to guess a password by enumerating all possible words. - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - - ' Now get the key/IV and do the encryption using the function - ' that accepts byte arrays. - ' Using PasswordDeriveBytes object we are first getting - ' 32 bytes for the Key - ' (the default Rijndael key length is 256bit = 32bytes) - ' and then 16 bytes for the IV. - ' IV should always be the block size, which is by default - ' 16 bytes (128 bit) for Rijndael. - ' If you are using DES/TripleDES/RC2 the block size is 8 - ' bytes and so should be the IV size. - ' You can also read KeySize/BlockSize properties off the - ' algorithm to find out the sizes. - Return Encrypt(clearData, pdb.GetBytes(32), pdb.GetBytes(16)) - - End Function - - ' Encrypt a file into another file using a password - Public Shared Sub Encrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String) - - ' First we are going to open the file streams - Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read) - Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write) - - ' Then we are going to derive a Key and an IV from the - ' Password and create an algorithm - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - - Dim alg As Rijndael = Rijndael.Create() - alg.Key = pdb.GetBytes(32) - alg.IV = pdb.GetBytes(16) - - ' Now create a crypto stream through which we are going - ' to be pumping data. - ' Our fileOut is going to be receiving the encrypted bytes. - Dim cs As New CryptoStream(fsOut, alg.CreateEncryptor(), CryptoStreamMode.Write) - - ' Now will will initialize a buffer and will be processing - ' the input file in chunks. - ' This is done to avoid reading the whole file (which can - ' be huge) into memory. - Dim bufferLen As Integer = 4096 - Dim buffer As Byte() = New Byte(bufferLen - 1) {} - Dim bytesRead As Integer - - Do - ' read a chunk of data from the input file - bytesRead = fsIn.Read(buffer, 0, bufferLen) - - ' encrypt it - cs.Write(buffer, 0, bytesRead) - Loop While bytesRead <> 0 - - ' close everything - - ' this will also close the unrelying fsOut stream - cs.Close() - fsIn.Close() - End Sub - - ' Decrypt a byte array into a byte array using a key and an IV - Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Key As Byte(), ByVal IV As Byte()) As Byte() - ' Create a MemoryStream that is going to accept the - ' decrypted bytes - Dim ms As New MemoryStream() - - ' Create a symmetric algorithm. - ' We are going to use Rijndael because it is strong and - ' available on all platforms. - ' You can use other algorithms, to do so substitute the next - ' line with something like - ' TripleDES alg = TripleDES.Create(); - Dim alg As Rijndael = Rijndael.Create() - - ' Now set the key and the IV. - ' We need the IV (Initialization Vector) because the algorithm - ' is operating in its default - ' mode called CBC (Cipher Block Chaining). The IV is XORed with - ' the first block (8 byte) - ' of the data after it is decrypted, and then each decrypted - ' block is XORed with the previous - ' cipher block. This is done to make encryption more secure. - ' There is also a mode called ECB which does not need an IV, - ' but it is much less secure. - alg.Key = Key - alg.IV = IV - - ' Create a CryptoStream through which we are going to be - ' pumping our data. - ' CryptoStreamMode.Write means that we are going to be - ' writing data to the stream - ' and the output will be written in the MemoryStream - ' we have provided. - Dim cs As New CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write) - - ' Write the data and make it do the decryption - cs.Write(cipherData, 0, cipherData.Length) - - ' Close the crypto stream (or do FlushFinalBlock). - ' This will tell it that we have done our decryption - ' and there is no more data coming in, - ' and it is now a good time to remove the padding - ' and finalize the decryption process. - cs.Close() - - ' Now get the decrypted data from the MemoryStream. - ' Some people make a mistake of using GetBuffer() here, - ' which is not the right way. - Dim decryptedData As Byte() = ms.ToArray() - - Return decryptedData - End Function - - ' Decrypt a string into a string using a password - ' Uses Decrypt(byte[], byte[], byte[]) - - Public Shared Function Decrypt(ByVal cipherText As String, ByVal Password As String) As String - ' First we need to turn the input string into a byte array. - ' We presume that Base64 encoding was used - Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText) - - ' Then, we need to turn the password into Key and IV - ' We are using salt to make it harder to guess our key - ' using a dictionary attack - - ' trying to guess a password by enumerating all possible words. - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - - ' Now get the key/IV and do the decryption using - ' the function that accepts byte arrays. - ' Using PasswordDeriveBytes object we are first - ' getting 32 bytes for the Key - ' (the default Rijndael key length is 256bit = 32bytes) - ' and then 16 bytes for the IV. - ' IV should always be the block size, which is by - ' default 16 bytes (128 bit) for Rijndael. - ' If you are using DES/TripleDES/RC2 the block size is - ' 8 bytes and so should be the IV size. - ' You can also read KeySize/BlockSize properties off - ' the algorithm to find out the sizes. - Dim decryptedData As Byte() = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16)) - - ' Now we need to turn the resulting byte array into a string. - ' A common mistake would be to use an Encoding class for that. - ' It does not work - ' because not all byte values can be represented by characters. - ' We are going to be using Base64 encoding that is - ' designed exactly for what we are trying to do. - Return System.Text.Encoding.Unicode.GetString(decryptedData) - End Function - - ' Decrypt bytes into bytes using a password - ' Uses Decrypt(byte[], byte[], byte[]) - - Public Shared Function Decrypt(ByVal cipherData As Byte(), ByVal Password As String) As Byte() - ' We need to turn the password into Key and IV. - ' We are using salt to make it harder to guess our key - ' using a dictionary attack - - ' trying to guess a password by enumerating all possible words. - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - - ' Now get the key/IV and do the Decryption using the - 'function that accepts byte arrays. - ' Using PasswordDeriveBytes object we are first getting - ' 32 bytes for the Key - ' (the default Rijndael key length is 256bit = 32bytes) - ' and then 16 bytes for the IV. - ' IV should always be the block size, which is by default - ' 16 bytes (128 bit) for Rijndael. - ' If you are using DES/TripleDES/RC2 the block size is - ' 8 bytes and so should be the IV size. - - ' You can also read KeySize/BlockSize properties off the - ' algorithm to find out the sizes. - Return Decrypt(cipherData, pdb.GetBytes(32), pdb.GetBytes(16)) - End Function - - ' Decrypt a file into another file using a password - Public Shared Sub Decrypt(ByVal fileIn As String, ByVal fileOut As String, ByVal Password As String) - - ' First we are going to open the file streams - Dim fsIn As New FileStream(fileIn, FileMode.Open, FileAccess.Read) - Dim fsOut As New FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write) - - ' Then we are going to derive a Key and an IV from - ' the Password and create an algorithm - Dim pdb As New PasswordDeriveBytes(Password, New Byte() {&H49, &H76, &H61, &H6E, &H20, &H4D, _ - &H65, &H64, &H76, &H65, &H64, &H65, _ - &H76}) - Dim alg As Rijndael = Rijndael.Create() - - alg.Key = pdb.GetBytes(32) - alg.IV = pdb.GetBytes(16) - - ' Now create a crypto stream through which we are going - ' to be pumping data. - ' Our fileOut is going to be receiving the Decrypted bytes. - Dim cs As New CryptoStream(fsOut, alg.CreateDecryptor(), CryptoStreamMode.Write) - - ' Now will will initialize a buffer and will be - ' processing the input file in chunks. - ' This is done to avoid reading the whole file (which can be - ' huge) into memory. - Dim bufferLen As Integer = 4096 - Dim buffer As Byte() = New Byte(bufferLen - 1) {} - Dim bytesRead As Integer - - Do - ' read a chunk of data from the input file - bytesRead = fsIn.Read(buffer, 0, bufferLen) - - ' Decrypt it - - cs.Write(buffer, 0, bytesRead) - Loop While bytesRead <> 0 - - ' close everything - cs.Close() - ' this will also close the unrelying fsOut stream - fsIn.Close() - End Sub -End Class - - - diff --git a/RDSFactor/RDSFactor.vb b/RDSFactor/RDSFactor.vb index de8feb2..7ca449d 100644 --- a/RDSFactor/RDSFactor.vb +++ b/RDSFactor/RDSFactor.vb @@ -206,7 +206,7 @@ Public Class RDSFactor For i As Integer = 0 To ClientArray.Length - 1 ServerLog("Loading Shared Secret for Client: " & ClientArray(i)) - clientHash.Add(ClientArray(i), EncDec.Decrypt(RConfig.GetKeyValue("Clients", ClientArray(i)), "gewsyy#sjs2!")) + clientHash.Add(ClientArray(i), RConfig.GetKeyValue("Clients", ClientArray(i))) Next If ConfOk = True Then diff --git a/RDSFactor/RDSFactor.vbproj b/RDSFactor/RDSFactor.vbproj index 31b7d9c..3ecda40 100644 --- a/RDSFactor/RDSFactor.vbproj +++ b/RDSFactor/RDSFactor.vbproj @@ -79,7 +79,6 @@ - diff --git a/RDSFactor/bin/Debug/CICRadarR.ini b/RDSFactor/bin/Debug/CICRadarR.ini index 94e7e46..24a35de 100644 --- a/RDSFactor/bin/Debug/CICRadarR.ini +++ b/RDSFactor/bin/Debug/CICRadarR.ini @@ -16,4 +16,4 @@ EnableSMS=1 COMPORT=com1 ADMailfield=mail [Clients] -127.0.0.1=eXA0YJxFrgfaDtOFApCifbPtJYrEL0RjpDzymPKlw6c= \ No newline at end of file +127.0.0.1=helloworld \ No newline at end of file