Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Delphi 6: Tetraden tauschen

Empfohlene Antworten

Veröffentlicht

Hallo Freunde der Nacht. Hier mal wieder ein scheinbar :confused: Schwieriges Problem.

Also ich schreibe gerade ein sehr einfachen Verschlüsselungs-Algorithmus. Dabei beschränke ich mich erstmel drauf den Text in Hex mit vertauschen Tetraden anzuzeigen. Also ist die "1" nicht 31 sondern 13. Sollte eigentlich ganz simpel sein. Doch wer mal meinen Quellcode durchspielt sieht schnell den Fehler gebe ich x1 aus kommt nicht 0x30 sondern 0x10 raus. Gebe ich entgegen x2 aus kommt 0xF raus. Ich befürchte das es an der Typenkonvertierung liegt. Aber wo??

Hier erstmal der Code


procedure codify;
var ordpass : Integer;
var hexpass: string;
var x1,x2,x3 : integer;
begin
ordpass:=ord(pass1[1]);
hexpass:=inttohex(ordpass,2);

x1:=strtoint(hexpass) and $F0;
x2:=strtoint(hexpass) and $0F;

//Shiften und verundung aus 03 ^10 = 13
// Ausgeklammert weil uninterresant beim Prob
// x1:=x1 shl 2; //03-->
// x2:=x2 shr 2; //10<--
// x3:=x1 and x2;//13

formpasswort.edit2.text:= inttohex(x1,1);
formpasswort.edit3.text:= inttohex(x2,1);
formpasswort.edit4.text:= hexpass;
end;
[/PHP]

Wenn mir jetzt einer anbietet die Indiezies des String von "31" nur einfach nur zu tauschen, den warne ich vor. Der leichteste Weg ist nicht immer der des Wissbegierigsten!

Also kann mir einer sagen warum es nicht funzt?

MVG

need-some-blood

Ich befürchte das es an der Typenkonvertierung liegt. Aber wo??

Ich hab das grad mal mit eigenem Code, nach deinen Vorstellungen, durchgespielt:


procedure TForm1.Button1Click(Sender: TObject);

var i, i1, i2: integer;

    s: String;

begin

  i:= Ord(edit1.text[1]); // Eingabe ist 'a'

  s:= IntToHex(i, 2); // s = '61' 

  edit2.Text:= s; // Zwischenergebnis ausgeben

  i1:= StrToInt(s) and $F0; //i1 = 48 

  i2:= StrToInt(s) and $0F; // i2 = 13

  edit3.Text:= IntToHEx(i1, 2) + ', ' + IntToHex(i2, 2); // edit3.Text = '30, 0D'

end;

Also nicht 16, sondern 3D. Warum das? Wenn wir uns 3D mal ankucken ergibt das in Dec genau...was... 61! Der Fehler liegt also in der StrToInt Umwandlung. StrToInt von ($)'61' ist eben nicht 97 sondern bleibt 61.

61 ist aber $3D.

Oder hab ich dich jetzt irgendwie falsch verstanden?

Jep. Hast vollkommen recht. Hatte den Fehler an dem selben Abend auch entdeckt. Blödes Brett vorm Kopf.

Jetzt tasuche ich doch die Chars im String. Sieht auch besser aus, und es kann jeder nachvollziehen. Wollte nur Wissen wo der Fehler liegt. Vielen Dank für die Bestätigung.

MVG

need-some-blood

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.