RNG_KeyHex generates a random set of data in hexadecimal format suitable for cryptographic keys.
Public Declare Function RNG_KeyHex Lib "diCryptoSys.dll"
(ByVal strOutput As String, ByVal nMaxChars As Long, ByVal nBytes As Long,
ByVal strSeed As String, ByVal nSeedLen As Long) As Long
nRet = RNG_KeyHex(strOutput, nMaxChars, nBytes, strSeed, nSeedLen)
String of sufficient length to receive the output.Long specifying the maximum number of characters in strOutput.Long value of the required key length in bytes.String containing an (optional) user-specified seed to be
used by the random number generator. Specify an empty string ("") or NULL to ignore..Long specifying the size of the seed in bytes.
long _stdcall RNG_KeyHex(char *hexstr, long maxchars, long nbytes, const char *seed, long seedlen);
Long: Always returns zero.
If the function fails its continuous random number generator test, a critical error will occur.
See Self Tests for more details.
Rng.KeyHex Method (Int32, Byte[])
Rng.KeyHex Method (Int32, String)
rng.KeyHex
Public Function KeyHex(ByVal nBytes As Long) As String
See rng.KeyHex.
The output string strOutput should be pre-dimensioned to be at least double the
required key length in bytes. (Hint: specify nMaxChars as Len(strOutput)).
The seed strSeed is optional and is added to the automatic seed values generated internally.
The seed cannot directly affect the value of the output; it will just ensure that it will be different.
Dim strHexKey As String
Dim nRet As Long
Dim nKeyBytes As Long
Dim strSeed As String
Dim i As Integer
nKeyBytes = 24
' Pre-dimension hex string to be DOUBLE key length in bytes
strHexKey = String(nKeyBytes * 2, " ")
nRet = RNG_KeyHex(strHexKey, Len(strHexKey), nKeyBytes, "", 0)
Debug.Print strHexKey
' Generate three successive 192-bit random keys with no seeding
For i = 1 To 3
nRet = RNG_KeyHex(strHexKey, Len(strHexKey), nKeyBytes, "", 0)
Debug.Print strHexKey
Next
' Generate three more 192-bit random keys using the counter as a seed
For i = 1 To 3
strSeed = CStr(i)
nRet = RNG_KeyHex(strHexKey, Len(strHexKey), nKeyBytes, strSeed, Len(strSeed))
Debug.Print strHexKey
Next
' Generate a DES key and check if it's a weak key
strHexKey = String(8 * 2, " ")
nRet = RNG_KeyHex(strHexKey, Len(strHexKey), 8, "", 0)
Debug.Print strHexKey
nRet = DES_CheckKeyHex(strHexKey)
Debug.Print "DES_CheckKeyHex returns " & nRet & " (" & apiErrorLookup(nRet) & ")"
' Test a known weak key
strHexKey = "fefefefefefefefe"
nRet = DES_CheckKeyHex(strHexKey)
Debug.Print "DES_CheckKeyHex returns " & nRet & " (" & apiErrorLookup(nRet) & ")"
This will produce output that of the following form with obviously different values:
307152819FE0C2E718A1A6D4FA49AABB36CF274EABA77038 A02FE37FB1BB2F26636B2FAB79D3502617F5FF1761056D0A E936ED0A805CB5D8190C33B24CE90B9C47CD75627D559E17 5A630F6D97CA0DF22649FABFFF555D91820797C6378C0972 F82B84DD477F065A5D9D2B8B4C625977B5433EA50671A28B BB54598AA5457F46EAEEB7BD78DA1B1C34F81894FEB216FB E8CB635CC3D3571DD44D8C982B887E35F00252DF336DAC5A C7412767A925CA74 DES_CheckKeyHex returns 0 (OK, success, no error) DES_CheckKeyHex returns 52 (Weak key)