| |
Fortgeschrittene ProgrammierungAES-256 Verschlüsselung | | | Autor: Tomy41 | Datum: 26.02.17 12:27 |
| Hallo Allerseits,
ich stehe vor der Aufgabe, eine Zeichenkette nach AES-256 im ICM/CTR Modus (?) mit zwei Parametern zu verschlüsseln (Schlüssel und IV). Das Ergebnis muss ein 16 Bytes großer Wert sein, aus dem die ersten 5 Bytes zu extrahieren sind.
Der Schlüssel soll dabei nur einmal generiert und dann bekanntgegeben werden, IV wird demgegenüber stets neu berechnet, wird dann aber jeweils mitgeliefert. Somit soll der Empfänger in der Lage sein, mit Key und IV das Ganze wieder zu entschlüsseln.
Ich habe mir dazu einmal ein Beispiel aus einem anderen Thread heruntergeladen, sehe aber nur „böhmische Wälder“
Wo erhalte ich hier den Schlüssel und wie wird IV verwendet ?
Nr, fkey und rkey sind wohl die Grundlagen für den Schlüssel, aber wie erhalte ich daraus eine Zeichenkette, die ich weitergeben kann.
Und wie und wo wird IV verwendet ?
Ich hänge die Rijndael-Klasse in gesonderten Beitrag an (auf 128bit-Blockgröße reduziert), vielleicht kann mir ja jemad auf die Sprünge helfen ...
EDIT: wie kann ich hier Code mitliefern ? Ich bekomme ständig die Meldend, Beitrag zu lang ?
bis später
Tomy
Beitrag wurde zuletzt am 26.02.17 um 12:32:12 editiert. | |
Re: AES-256 Verschlüsselung | | | Autor: Tomy41 | Datum: 26.02.17 17:32 |
| Hier ein Paar Zeilen Code:
'Key schedule arrays
Private Nr As Long 'Number of rounds [For 128 bit block, Nr = {10,
' 12, 14} for 128, 192, 256 bit cipher key]
Private fkey(59) As Long 'Nb*(Nr + 1)
Private rkey(59) As Long 'Nb*(Nr + 1)
'For file encryption, this is the maximum amount of memory (in bytes) allowed
' for file data
Private Const MaxFileChunkSize As Long = 4000000
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
Destination As Any, Source As Any, ByVal Length As Long)
'Decryption Key Scheduler. Calculate rkey() decryption keys based on fkey()
' and Nr.
'Nb is the number of 32 bit units in the block size.
Private Sub CreateDecryptionKeys(Nb As Long)
Dim i As Long
Dim j As Long
Dim k As Long
Dim s(3) As Byte
'Invert the order of the round keys
i = 0
j = Nb * Nr
For k = 0 To Nr
CopyMemory rkey(i), fkey(j), Nb * 4&
i = i + Nb
j = j - Nb
Next k
'Apply the inverse MixColumn transform to all round keys except the first
' and the last
For i = Nb To Nb * Nr - 1
CopyMemory s(0), rkey(i), 4&
rkey(i) = Td0(Te4(s(0)) And &HFF&) Xor _
Td1(Te4(s(1)) And &HFF&) Xor _
Td2(Te4(s(2)) And &HFF&) Xor _
Td3(Te4(s(3)) And &HFF&)
Next i
End Sub
'Key Scheduler. Expand the cipher key into the encryption key schedule.
'pass(0 ... n-1) contains the cipher key, where n = {16, 20, 24, 28, 32} ,
' depending on KeyBits.
'If SUPPORT_LEVEL is non-zero, you must specify BlockBits for the block size
' you will be using.
'Returns zero on success.
Public Function SetCipherKey(pass() As Byte, KeyBits As Long) As Long
Dim i As Long
Dim j As Long
Dim s(3) As Byte
[...]
i = 8
j = 0
CopyMemory fkey(0), pass(0), 4& * i
Do
CopyMemory s(0), fkey(i - 1), 4&
fkey(i) = fkey(i - 8) Xor (Te4(s(0)) And &HFF000000) _
Xor (Te4(s(3)) And &HFF0000) _
Xor (Te4(s(2)) And &HFF00&) _
Xor (Te4(s(1)) And &HFF&) _
Xor rco(j)
fkey(i + 1) = fkey(i - 7) Xor fkey(i)
fkey(i + 2) = fkey(i - 6) Xor fkey(i + 1)
fkey(i + 3) = fkey(i - 5) Xor fkey(i + 2)
If j = 6 Then Exit Do
CopyMemory s(0), fkey(i + 3), 4&
fkey(i + 4) = fkey(i - 4) Xor (Te4(s(3)) And &HFF000000) _
Xor (Te4(s(2)) And &HFF0000) _
Xor (Te4(s(1)) And &HFF00&) _
Xor (Te4(s(0)) And &HFF&)
fkey(i + 5) = fkey(i - 3) Xor fkey(i + 4)
fkey(i + 6) = fkey(i - 2) Xor fkey(i + 5)
fkey(i + 7) = fkey(i - 1) Xor fkey(i + 6)
i = i + 8
j = j + 1
Loop
Nr = 14
CreateDecryptionKeys 4
End Function
Public Function SetCipherKeyString(PassPhrase As String, KeyBits As Long) As _
Long
Dim pass() As Byte
pass = StrConv(PassPhrase, vbFromUnicode)
ReDim Preserve pass(31)
SetCipherKeyString = SetCipherKey(pass, KeyBits)
End Function bis später
Tomy | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|