Hallo liebe Community,
ich habe entweder ein Problem das meine Fähigkeiten übersteigt,
oder aber mir muss wer das brett vorm Kopf mal runternehmen.
Und zwar weiß ich wie man mit AES ver- und entschlüsselt aber ich bräuchte(auch wenn ichs lieber vermeiden würde),
die möglichkeit das ganze mit CFB8 zu erledigen.
Kurz und knapp: Ist es ohne größeren Aufwand möglich oder muss ich das von Grund auf neu schreiben?
Hoffe es war verständlich.
Schon mal Danke für jede Antwort eurerseits.
MFG R4z0r1989
AES/CFB8
Re: AES/CFB8
Zumindest mit den PB - AES Funktionen wirst du wohl nicht weiterkommen, diese unterstützen nur die Modi CBC und EBC. CFB, obwohl sehr ähnlich CBC würde die Verwendung als Strom - Verschlüsselung erlauben, ist aber leider nicht implementiert. Eventuell ein Feature - Request im englischen Forum?
Gruß, Alex
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster
PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
-
- Beiträge: 213
- Registriert: 13.07.2008 10:05
- Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660
Re: AES/CFB8
Nun ja du musst dir den CFB Modus wohl selber bauen den gibt es in PureBasic nicht aber du sollest dabei auf den AES ECB Modus von PureBasic zurückgreifen können damit sollte das dann relativ einfach gehen. Du musst dann ja nur noch die Stromverschlüsselung basierend auf der vorhanden Blockverschlüsselung umsetzen.
Edit1:
So ich habe mich mal an meine Kryptographie Vorlesung zurück erinnert und etwas herumprobiert so sollte das gehen, hoffe das hilft dir weiter:
Edit2: Code entfernt da nun eine bessere Variante existiert
Edit1:
So ich habe mich mal an meine Kryptographie Vorlesung zurück erinnert und etwas herumprobiert so sollte das gehen, hoffe das hilft dir weiter:
Edit2: Code entfernt da nun eine bessere Variante existiert
Zuletzt geändert von Christian+ am 14.03.2013 11:19, insgesamt 1-mal geändert.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
-
- Beiträge: 213
- Registriert: 13.07.2008 10:05
- Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660
Re: AES/CFB8
So ich hab mal meinen Code für eine AES Verschlüsselung im CFB8 Modus noch ein wenig optimiert falls ihn mal noch jemand anders braucht.
Code: Alles auswählen
EnableExplicit
Structure CFB8Data
*IV
*EncodedIV.Ascii
Cipher.i
EndStructure
Procedure.i StartAESCFB8Cipher(*Key, *IV = 0, Bits.i = 256)
Protected *Cipher.CFB8Data = AllocateMemory(SizeOf(CFB8Data))
*Cipher\IV = AllocateMemory(16)
*Cipher\EncodedIV = AllocateMemory(16)
*Cipher\Cipher = StartAESCipher(#PB_Any, *Key, Bits, *Cipher\IV, #PB_Cipher_Encode | #PB_Cipher_ECB)
If *IV > 0 : CopyMemory(*IV, *Cipher\IV, 16) : Else : RandomData(*Cipher\IV, 16) : EndIf
ProcedureReturn *Cipher
EndProcedure
Procedure AddAESCFB8CipherBuffer(*Cipher.CFB8Data, *InputMemory.Ascii, *OutputMemory.Ascii, Size.i, Mode.i = #PB_Cipher_Encode)
Protected Max.i = *InputMemory + Size
While *InputMemory < Max
AddCipherBuffer(*Cipher\Cipher, *Cipher\IV, *Cipher\EncodedIV, 16)
*OutputMemory\a = *InputMemory\a ! *Cipher\EncodedIV\a
MoveMemory(*Cipher\IV+1, *Cipher\IV, 15)
If Mode = #PB_Cipher_Decode : PokeA(*Cipher\IV+15, *InputMemory\a) : Else : PokeA(*Cipher\IV+15, *OutputMemory\a) : EndIf
*InputMemory+1
*OutputMemory+1
Wend
EndProcedure
Procedure FinishAESCFB8Cipher(*Cipher.CFB8Data)
FinishCipher(*Cipher\Cipher)
FreeMemory(*Cipher\IV)
FreeMemory(*Cipher\EncodedIV)
FreeMemory(*Cipher)
EndProcedure
;Beispiel
Define *Key, *IV, String.s, AESCFB8Cipher.i, *Memory, *EncodedMemory, *DecodedMemory
*Key = AllocateMemory(32) : RandomData(*Key, 32)
*IV = AllocateMemory(16) : RandomData(*Key, 16)
String.s = "Hallo Welt! Dies ist ein Beispiel ;-)" + "Hallo Welt! Dies ist ein Beispiel ;-)" + "Hallo Welt! Dies ist ein Beispiel ;-)" + "Hallo Welt! Dies ist ein Beispiel ;-)" + "Hallo Welt! Dies ist ein Beispiel ;-)"
*Memory = AllocateMemory(StringByteLength(String, #PB_Ascii) + 1)
PokeS(*Memory, String, -1, #PB_Ascii)
Debug PeekS(*Memory, -1, #PB_Ascii)
AESCFB8Cipher = StartAESCFB8Cipher(*Key, *IV, 256)
*EncodedMemory = AllocateMemory(MemorySize(*Memory))
AddAESCFB8CipherBuffer(AESCFB8Cipher, *Memory, *EncodedMemory, MemorySize(*Memory), #PB_Cipher_Encode)
FinishAESCFB8Cipher(AESCFB8Cipher)
Debug PeekS(*EncodedMemory, -1, #PB_Ascii)
AESCFB8Cipher = StartAESCFB8Cipher(*Key, *IV, 256)
*DecodedMemory = AllocateMemory(MemorySize(*EncodedMemory))
AddAESCFB8CipherBuffer(AESCFB8Cipher, *EncodedMemory, *DecodedMemory, MemorySize(*EncodedMemory), #PB_Cipher_Decode)
FinishAESCFB8Cipher(AESCFB8Cipher)
Debug PeekS(*DecodedMemory, -1, #PB_Ascii)
FreeMemory(*Memory)
FreeMemory(*EncodedMemory)
FreeMemory(*DecodedMemory)
FreeMemory(*Key)
FreeMemory(*IV)
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660