Bug? - AESEncoder und PHP

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Bug? - AESEncoder und PHP

Beitrag von GPI »

Das hat mich einen ganzen Abend gekostet. PureBasic und PHP benutzen eine völlig andere Art und Weise, wie sie die AESEncoder benutzen.

PHP benutzt als Eingangsbuffer immer ein vielfaches von 16 Byte (wenn man MCRYPT_RIJNDAEL_128 benutzt)

nur ein Beispiel

Code: Alles auswählen

Procedure.s srv_Crypt(text$)
  If text$=""
    ProcedureReturn ""
  EndIf
  a=Len(text$)
  a=((a+15)>>4)<<4
  *in=AllocateMemory(a*2+4)
  *out=*in+a+2
  PokeS(*in,text$)   
  AESEncoder(*in, *out,a,*srv_key, 256, *srv_iv,#PB_Cipher_CBC)
  ret$=peeks(*out,a)
  FreeMemory(*in)
  ProcedureReturn ret$
EndProcedure
Wichtig ist hier: "a=((a+15)>>4)<<4" - damit wird die Länge auf die nächste 16er-Grenze erhöht. (Wobei ich gerade seh, das könnte man auch mit & $FF lösen...)

Wie auch immer - Entweder wäre hier ein Hinweis in der Anleitung wichtig oder die Funktion müßte angepasst werden (bspw. optionaler Flag PHP-Compatible/RIJNDAEL_128).
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bug? - AESEncoder und PHP

Beitrag von STARGÅTE »

Du siehst doch aber selber das DU bei php MCRYPT_RIJNDAEL_128 nutzt und in PB 256 angegeben hast ...

Um einen Bug zu beweisen, wäre es nett, wenn du ein Lauffähigen Code (von PB und php) postet und nicht nur irgend ein Code-Schnipsel der nicht funktioniert (*srv_key und *srv_iv werde nirgends definiert)

Es wäre bei solchen Sachen immer erst besser im Frage-Forum zu fragen anstatt immer gleich PB zu verurteilen!

Den Ausgangsbuffer dann noch als String zurückzugeben ist der größte Fehler den man machen kann! da AESEncoder BINÄR-Daten zurück gibt!
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Bug? - AESEncoder und PHP

Beitrag von GPI »

STARGÅTE hat geschrieben:Du siehst doch aber selber das DU bei php MCRYPT_RIJNDAEL_128 nutzt und in PB 256 angegeben hast ...
Beliebter Fehler. MCRYPT_RIJNDAEL_128 gibt *NICHT* die Länge des Keys an! Das erfolgt an völlig anderer stelle.
Den Ausgangsbuffer dann noch als String zurückzugeben ist der größte Fehler den man machen kann! da AESEncoder BINÄR-Daten zurück gibt!
Oh, keine Angst, dafür benutz ich Base64Encoder
Es wäre bei solchen Sachen immer erst besser im Frage-Forum zu fragen anstatt immer gleich PB zu verurteilen!
Ich hab jetzt ca. 700 Zielen PHP-Code und ca. 900 Zeilen PB-Code - und der funktioniert nach dieser anpassung :)

aber php-datei

Code: Alles auswählen

$datei = fopen("c.txt","r");
$key=fread($datei, 16);
$vec=fread($datei,16);
$c1=fread($datei, 99);
fclose($datei);

echo bin2hex($key)."<br>";
echo bin2hex($vec)."<br>";
echo bin2hex($c1)."<br>";

echo strlen($c1)."<br>";

$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');

if (mcrypt_generic_init($cipher, $key, $vec) != -1)
	{
	
	$text = mdecrypt_generic($cipher,$c1 );
	mcrypt_generic_deinit($cipher);
	echo $text."<br>";
}
mcrypt_module_close($cipher);
die datei "c.txt" wird hiermit erzeugt:

Code: Alles auswählen

 ; Sollte im Ascii-Modus kompiliert werden
 ;

 ;              012345678901234501234567890123450123456789012345
 String$ = "The quick brown fox jumped over the lazy dog"
 
 a=Len(string$)
 
; die korrekturzeile
; a=((a+15)>>4)<<4
 
 
 *m=AllocateMemory(1024)
 PokeS(*m,string$)
 
 Debug "a:"+Str(a)
 Debug Len(string$)
  
  *CipheredString   = AllocateMemory(Len(String$)+1) ; Platz für den null-terminierten String
  *DecipheredString = AllocateMemory(Len(String$)+1) ; mit seiner abschließenden Null (ASCII-Modus)
  
  If AESEncoder(*m, *CipheredString,a, ?Key, 128, ?InitializationVector,#PB_Cipher_CBC)
    Debug "Ciphered: "+PeekS(*CipheredString)
    Debug Len(PeekS(*CipheredString))
    
    CreateFile(1,"c.txt")
    WriteData(1,?key,16)
    WriteData(1,?InitializationVector,16)
    WriteData(1,*CipheredString,a)
    Debug Hex(Asc(Right(PeekS(*cipheredstring),1)));
    Debug Len(string$)
    Debug Len(PeekS(*CipheredString))
    closefile(1)
  EndIf

  DataSection
Key:
    Data.s "1234567890123456"
  
      InitializationVector:
      Data.s "1234567890123456"
      
endDataSection
  
getestet mit XAMPP
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bug? - AESEncoder und PHP

Beitrag von STARGÅTE »

Ach wenn der Code immer noch nicht lauffähig ist ...

würde ich mal sagen, das es kein BUG ist.

Dass auffüllen ist (wie ich die Hilfe verstehe >hier<) freiwillig.
Dass heißt der AES-Algo funktioniert auch mit größen über 16 die nicht vielfachen von 16 sind!
2.4. Block Size and Padding

The AES uses a block size of sixteen octets (128 bits).

Padding is required by the AES to maintain a 16-octet (128-bit)
blocksize. Padding MUST be added, as specified in [ESP], such that
the data to be encrypted (which includes the ESP Pad Length and Next
Header fields) has a length that is a multiple of 16 octets.

Because of the algorithm specific padding requirement, no additional
padding is required to ensure that the ciphertext terminates on a 4-
octet boundary (i.e., maintaining a 16-octet blocksize guarantees
that the ESP Pad Length and Next Header fields will be right aligned
within a 4-octet word). Additional padding MAY be included, as
specified in [ESP], as long as the 16-octet blocksize is maintained.
Das PHP nun immer automatisch eine größen Anpassung macht, liegt dann aber an PHP und nicht an PB...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Bug? - AESEncoder und PHP

Beitrag von GPI »

STARGÅTE hat geschrieben:Ach wenn der Code immer noch nicht lauffähig ist ...
füg bei php "<?php" und "?>" ein, dann sollte das gehen, oder was klappt nicht?
Das PHP nun immer automatisch eine größen Anpassung macht, liegt dann aber an PHP und nicht an PB...
Äh, deshalb steht auch "bug?" in Titel und der Text das man einen Hinweis in der Anleitung oder einen optionalen Parameter einsetzt. Gerade der Hinweis würde einigen vielleicht *VIEL* arbeit ersparen. PHP ist nun ja nicht wirklich ein Exot und es wäre möglich, das andere Programme das gleiche Verhalten an den Tag legen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Bug? - AESEncoder und PHP

Beitrag von STARGÅTE »

füg bei php "<?php" und "?>" ein, dann sollte das gehen, oder was klappt nicht?
Ne hatte was in PB falsch
Äh, deshalb steht auch "bug?" in Titel und der Text das man einen Hinweis in der Anleitung oder einen optionalen Parameter einsetzt. Gerade der Hinweis würde einigen vielleicht *VIEL* arbeit ersparen. PHP ist nun ja nicht wirklich ein Exot und es wäre möglich, das andere Programme das gleiche Verhalten an den Tag legen.
Ja dann wäre es aber wie gesagt in Wüschne oder Fragen besser aufgehoben ... egal ...
Kannst ja mal im engleichen Forum posten ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten