Hello,
In the Visual Basic example I see the next line:
tdes.Key = pdb.CryptDerive Key("TripleDES" , "SHA1", 192, tdes.IV)
tdes.Key is obviously created.
but what about tdes.IV?
This value is never filled if I'm correct?
help code:
Imports System
Imports System.Security .Cryptography
Imports System.Text
Module PasswordDerived BytesExample
Sub Main(ByVal args() As String)
' Get a password from the user.
Console.WriteLi ne("Enter a password to produce a key:")
'************** *************** *************** ************
'* Security Note: Never hard-code a password within your
'* source code. Hard-coded passwords can be retrieved
'* from a compiled assembly.
'************** *************** *************** ************
Dim pwd As Byte() = Encoding.Unicod e.GetBytes(Cons ole.ReadLine())
Dim salt As Byte() = createRandomSal t(7)
' Create a TripleDESCrypto ServiceProvider object.
Dim tdes As New TripleDESCrypto ServiceProvider ()
Try
Console.WriteLi ne("Creating a key with PasswordDeriveB ytes...")
' Create a PasswordDeriveB ytes object and then create
' a TripleDES key from the password and salt.
Dim pdb As New PasswordDeriveB ytes(pwd, salt)
' Create the key and add it to the Key property.
tdes.Key = pdb.CryptDerive Key("TripleDES" , "SHA1", 192, tdes.IV)
Console.WriteLi ne("Operation complete.")
Catch e As Exception
Console.WriteLi ne(e.Message)
Finally
' Clear the buffers
clearBytes(pwd)
clearBytes(salt )
' Clear the key.
tdes.Clear()
End Try
Console.ReadLin e()
End Sub
'************** *************** *************** ************
'* Helper methods:
'* createRandomSal t: Generates a random salt value of the
'* specified length.
'*
'* clearBytes: Clear the bytes in a buffer so they can't
'* later be read from memory.
'************** *************** *************** ************
Function createRandomSal t(ByVal Length As Integer) As Byte()
' Create a buffer
Dim randBytes() As Byte
If Length >= 1 Then
randBytes = New Byte(Length) {}
Else
randBytes = New Byte(0) {}
End If
' Create a new RNGCryptoServic eProvider.
Dim rand As New RNGCryptoServic eProvider()
' Fill the buffer with random bytes.
rand.GetBytes(r andBytes)
' return the bytes.
Return randBytes
End Function
Sub clearBytes(ByVa l Buffer() As Byte)
' Check arguments.
If Buffer Is Nothing Then
Throw New ArgumentExcepti on("Buffer")
End If
' Set each byte in the buffer to 0.
Dim x As Integer
For x = 0 To Buffer.Length - 1
Buffer(x) = 0
Next x
End Sub
End Module
In the Visual Basic example I see the next line:
tdes.Key = pdb.CryptDerive Key("TripleDES" , "SHA1", 192, tdes.IV)
tdes.Key is obviously created.
but what about tdes.IV?
This value is never filled if I'm correct?
help code:
Imports System
Imports System.Security .Cryptography
Imports System.Text
Module PasswordDerived BytesExample
Sub Main(ByVal args() As String)
' Get a password from the user.
Console.WriteLi ne("Enter a password to produce a key:")
'************** *************** *************** ************
'* Security Note: Never hard-code a password within your
'* source code. Hard-coded passwords can be retrieved
'* from a compiled assembly.
'************** *************** *************** ************
Dim pwd As Byte() = Encoding.Unicod e.GetBytes(Cons ole.ReadLine())
Dim salt As Byte() = createRandomSal t(7)
' Create a TripleDESCrypto ServiceProvider object.
Dim tdes As New TripleDESCrypto ServiceProvider ()
Try
Console.WriteLi ne("Creating a key with PasswordDeriveB ytes...")
' Create a PasswordDeriveB ytes object and then create
' a TripleDES key from the password and salt.
Dim pdb As New PasswordDeriveB ytes(pwd, salt)
' Create the key and add it to the Key property.
tdes.Key = pdb.CryptDerive Key("TripleDES" , "SHA1", 192, tdes.IV)
Console.WriteLi ne("Operation complete.")
Catch e As Exception
Console.WriteLi ne(e.Message)
Finally
' Clear the buffers
clearBytes(pwd)
clearBytes(salt )
' Clear the key.
tdes.Clear()
End Try
Console.ReadLin e()
End Sub
'************** *************** *************** ************
'* Helper methods:
'* createRandomSal t: Generates a random salt value of the
'* specified length.
'*
'* clearBytes: Clear the bytes in a buffer so they can't
'* later be read from memory.
'************** *************** *************** ************
Function createRandomSal t(ByVal Length As Integer) As Byte()
' Create a buffer
Dim randBytes() As Byte
If Length >= 1 Then
randBytes = New Byte(Length) {}
Else
randBytes = New Byte(0) {}
End If
' Create a new RNGCryptoServic eProvider.
Dim rand As New RNGCryptoServic eProvider()
' Fill the buffer with random bytes.
rand.GetBytes(r andBytes)
' return the bytes.
Return randBytes
End Function
Sub clearBytes(ByVa l Buffer() As Byte)
' Check arguments.
If Buffer Is Nothing Then
Throw New ArgumentExcepti on("Buffer")
End If
' Set each byte in the buffer to 0.
Dim x As Integer
For x = 0 To Buffer.Length - 1
Buffer(x) = 0
Next x
End Sub
End Module