Delphi-Quellcode:
with TCipher_Rijndael.Create do
try
Mode := cmOFB8;
Init('Passwort', #0, $00);
WriteLn(EncodeBinary('Deins', TFormat_HEX));
finally
Free;
end;
ergibt bei mir a1e105e433.
ECB ist ein Modus der immer ganze Blöcke verschlüsseln muß, es gibt bei diesem kein Padding. Wenn also PHP ohne Fehlermeldung es zulässt und man zb. eine 17 Bytes lange Nachricht in diesem Modus verschlüsseln kann, dann ist dies verfahrenstechnisch unsicher. ECB heist Electronic Codebook und das heist soviel wie: lasse den Cipher arbeiten ohne irgendwelches Post-/Preprocessing, ohne Feedback Verküpfungen der Datenblöcke untereinander, damit die vielen Programmierer mit ihren unterschiedlichen Programmirsprachen eine gemeinsamme Basis besitzen mit der man eine Querüberprüfung der Implementationen machen kann. ECB sollte man also niemals so nackig für reale Verschlüsselungen benutzen, es sei denn die Nachrichten sind aus Zufall. Da AES ein Blockciophr ist und mit Blöcken a 16 Bytes arbeitet wird er also die Nachricht in Blöcken a 16 Bytes Länge zerlegen und jeden Block separat verschlüsseln. Da jeder Blockcipher so nur Blockweise richtig ver- und wieder entschlüsseln kann heist dies das eine Nachricht auf eine Länge erweitert werden muß die durch 16 ohne Probleme teilbar ist. Andere Blockcipher benutzen zb. 8 Bytes oder 12 Bytes Blockgröße, je nach Algorithmus. Die Fehlermeldung vom
DEC ist also ein Hinweis darauf das du was machen möchtest das technisch nicht korrekt funktionieren kann und kryptographisch keinen Sinn ergibt (ausser um zu testen ob der Programierer der Library seine Arbeit richtig gemacht hat und solche Fehlbenutzungen unterbindet, naja PHP halt
)
Gruß Hagen