Code aus RijndaelTest.bas
Private Const EXIT_ON_ERROR As Boolean = TruePublic Sub Do_Tests()
VariableKey_Test
VariableText_Test
Random_Test
End Sub
Private Sub VariableKey_Test()
Dim key() As Byte, block(3, 3) As Byte
Dim i As Byte, n As Byte, c As Long, k As String
Log "Test mit variablen Schlüssel wird gestartet"
Log "Block- und Schlüssellänge: 128 Bit"
k = String(16, "0")
c = 1
Mid$(k, c, 1) = "8"
Do
key = StrConv(k, vbFromUnicode)
KeyExpansion key, 128
For i = 0 To 3
For n = 0 To 3
block(i, n) = 0
Next n
Next i
Rijndael_EncryptBlock block
Rijndael_DecryptBlock block
For i = 0 To 3
For n = 0 To 3
If block(i, n) <> 0 Then
Log "Fehler aufgetreten, VariableKey-Test"
PrintBlock block
If EXIT_ON_ERROR Then
Stop
End If
End If
Next n
Next i
If Mid$(k, c, 1) = "1" Then
Mid$(k, c, 1) = "0"
c = c + 1
If c > 16 Then
Exit Do
End If
Mid$(k, c, 1) = "8"
Else
If Mid$(k, c, 1) = "2" Then
Mid$(k, c, 1) = "1"
Else
If Mid$(k, c, 1) = "4" Then
Mid$(k, c, 1) = "2"
Else
If Mid$(k, c, 1) = "8" Then
Mid$(k, c, 1) = "4"
Else
Stop
End If
End If
End If
End If
Loop
Log CStr(c * 4 - 4) & " Schlüssel ausprobiert"
Log "Test erfolgreich beendet"
Log "#####################################"
End Sub
Private Sub VariableText_Test()
Dim key() As Byte, block() As Byte, block2() As Byte
Dim i As Byte, n As Byte, c As Long, b As String
Log "Test mit variablem Plaintext wird gestartet"
Log "Block- und Schlüssellänge: 128 Bit"
key = StrConv(String(16, "0"), vbFromUnicode)
KeyExpansion key, 128
b = String(16, "0")
c = 1
Mid$(b, c, 1) = "8"
Do
StringToBlock b, block, 128
StringToBlock b, block2, 128
Rijndael_EncryptBlock block
Rijndael_DecryptBlock block
For i = 0 To 3
For n = 0 To 3
If block(i, n) <> block2(i, n) Then
Log "Fehler aufgetreten, VariableText-Test"
PrintBlock block
PrintBlock block2
If EXIT_ON_ERROR Then
Stop
End If
End If
Next n
Next i
If Mid$(b, c, 1) = "1" Then
Mid$(b, c, 1) = "0"
c = c + 1
If c > 16 Then
Exit Do
End If
Mid$(b, c, 1) = "8"
Else
If Mid$(b, c, 1) = "2" Then
Mid$(b, c, 1) = "1"
Else
If Mid$(b, c, 1) = "4" Then
Mid$(b, c, 1) = "2"
Else
If Mid$(b, c, 1) = "8" Then
Mid$(b, c, 1) = "4"
Else
Stop
End If
End If
End If
End If
Loop
Log CStr(c * 4 - 4) & " Blöcke ausprobiert"
Log "Test erfolgreich beendet"
Log "#####################################"
End Sub
Private Sub Random_Test()
Dim key() As Byte, block() As Byte, block2() As Byte
Dim i As Long, k As String, n As Long
Log "Verschiedene Tests werden ausgeführt"
Log "Block- und Schlüssellänge: 128 Bit"
Log "Schlüssel und Block identisch: = Null"
ReDim key(15)
ReDim block(3, 3): ReDim block2(3, 3)
KeyExpansion key, 128
Rijndael_EncryptBlock block
Rijndael_DecryptBlock block
Check_Block block, block2
Log "Schlüssel und Block identisch: Zufallswerte"
k = ""
For i = 1 To 16
k = k & Chr$(Rnd * 255)
Next i
key = StrConv(k, vbFromUnicode)
StringToBlock k, block, 128
Copy_Block block, block2
KeyExpansion key, 128
Rijndael_EncryptBlock block
Rijndael_DecryptBlock block
Check_Block block, block2
Log "Schlüssel und Block zufällig festgelegt"
For i = 1 To Rnd * 1000 + 1000
k = ""
For n = 1 To 16
k = k & Chr$(Rnd * 255)
Next n
key = StrConv(k, vbFromUnicode)
Set_Random block
Copy_Block block, block2
KeyExpansion key, 128
Rijndael_EncryptBlock block
Rijndael_DecryptBlock block
Check_Block block, block2
Next i
Log "Test erfolgreich beendet"
Log "#####################################"
End Sub
Private Sub Check_Block(block() As Byte, block2() As Byte)
Dim i As Long, n As Long
For i = 0 To 3
For n = 0 To 3
If block(i, n) <> block2(i, n) Then
Log "Fehler aufgetreten: Random_Test"
PrintBlock block
PrintBlock block2
If EXIT_ON_ERROR Then
Stop
End If
End If
Next n
Next i
End Sub
Private Sub Set_Random(block() As Byte)
Dim i As Long, n As Long
For i = 0 To 3
For n = 0 To 3
block(i, n) = Int(Rnd * 255)
Next n
Next i
End Sub
Private Sub Copy_Block(block() As Byte, block2() As Byte)
Dim i As Long, n As Long
For i = 0 To 3
For n = 0 To 3
block2(i, n) = block(i, n)
Next n
Next i
End Sub