Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak; 2019 febr. 27 21:42 #2324

  • Zapapa
  • Zapapa profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Köszönöm!
Látványos a különbség. Így már világos, hogy miért dolgozott úgy a program, ahogy.
Ezt a problémát megoldottnak tekinthetjük.
Köszönöm a segítséget.

Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak; 2019 febr. 27 16:57 #2323

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
A 63 a ? karaktert jelenti.
Ez az amit például akkor látsz az egyes (nemzeti) karakterek helyén a böngésződben ha egy weblap karakterkódolása hibásan van megadva (vagy sehogy) és e miatt nem értelmezhető megfelelően a jelsorozat.
A Lazarus a karakterláncokat (string-eket) UTF-8 kódolással kezeli belső használatra, de az operációs rendszerből érkező és oda küldött karaktereket a helyzetnek (rendszer kódolása) megfelelően kódolja.
Az UTF-8 karakterek közül egyesek (nemzeti és speciális) nem egy bájton hanem többön is (általában kettő) kerülnek tárolásra.
A kódodban egyszerű, egy bájton elhelyezkedő karaktereket vár az eljárásod ( OnKeyPress ), ami a magyar ékezetes karakterek esetén nem kódolható át, lévén ezek az UTF-8-ban két bájton vannak tárolva.
Ajánlom figyelmedbe az OnUTF8KeyPress eseménykezelőt, mellyel megfelelően kezelheted az ilyen karaktereket. Az eljárás egy karakterláncban (string) kapja meg a leütött billentyűhöz tartozó UTF-8 karaktert. A benne található bájtokra pedig úgy hivatkozhatsz mint egy hagyományos string egybájtos karaktereire:: UTF8Key[1] + UTF8Key[2]

Ennek kipróbálásához készíts egy TForm-ot két TMemo-val.
A Memo1 esetnén az OnKeyPress, a Memo2 esetén az OnUTF8KeyPress eseménykezelőt hozd létre.
Az eljárások tartalma az alábbi legyen (a te kódod alapján írtam):
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: char);
begin
  //Edit1.Text:=Cberedeti.Text + ' : ' + IntToStr(Byte(Key));
  Memo1.Text := Memo1.Text + ' : #' + IntToStr(Byte(Key)) + ' ';
end;
 
procedure TForm1.Memo2UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
var I:Integer;
begin
  Memo2.Text := Memo2.Text + ' : ';
  for I:=1 to Length(UTF8Key) do
    Memo2.Text := Memo2.Text + '#' + IntToStr(Byte(UTF8Key[I])) + ' ';
end;
Ha most ugyanazt begépeled mindkét Memo-ba láthatod a különbséget
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Zapapa

Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak; 2019 febr. 26 19:43 #2322

  • Zapapa
  • Zapapa profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Köszönöm a választ!
Keresni fogok a javaslatodban leírtaknak megfelelő megoldást. Azért érdekes, hogy
a For ciklust alkalmazó kód a a 2 db Memo-t ábrázoló képek eredményezi,
A KeyPress eljárás szerint pedig a kis 'ü' (de minden ékezetes betű kis és nagy változata is) a 63-as eredményt adja.
Excellben kipróbáltam, ott a kis 'ü' kódja 252.
Még

Melléklet:

Fájlnév: sszevont.txt
Fájlméret:1 KB
egyszer köszönöm.
Mellékletek:

Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak; 2019 febr. 26 17:08 #2321

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Szia!
Elsőre azt mondanám, hogy a gond a használt adattípusok (és esetleg az ebből következő automatikus karakterkódolás átalakítás) miatt lehet, persze kód nélkül ez csak egy tipp.
Egyébként jelszót soha ne tárolj, még kódolva se! Helyette egy ellenőrzőösszeget illik menteni. Pl.: MD5, SHA256 és a többiek.
A kódolásra és az ellenőrzőösszegek számítására is van sok ügyes eljárás a DCPcrypt Lazarus csomagban és a FreePascal alaptelepítésben is.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: Zapapa

Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak; 2019 febr. 25 08:22 #2319

  • Zapapa
  • Zapapa profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 11
  • Köszönetek: 0
Üdv mindenkinek! Nem tudom, olvassa-e a fórumot valaki, de bepróbálkozom, mert fölrúgom a gépet. Jelszó titkosítást akartam végezni a MySql kapcsolat biztonságosabbá tétele érdekében. A BlowFish-el egy hetet kísérleteztem, a neten föllelhető 6-8 különböző megoldást mind kipróbáltam, ötleteltem, nem működik. Vagy a dekódolás nem jó, vagy már a kódolás sem, de nem kapom vissza ugyan azt a jelszót, amit begépelek.
Gondoltam, írok egy algoritmust. A Caesar módszert választottam. Elég jónak tűnik, egyszerű az algoritmus, nosza. Gyakorlatilag minden betű helyesen kerül dekódolásra, a kis 'ü' kivételével. Ezt a betűt, nem hajlandó rendesen dekódolni. És itt kezdődnek a gondok. Addig addig masszíroztam, hogy a végére meglepődve láttam, hogy az ORD függvény szinte minden ékezetes betűnek a 195-ös kódot adja vissza. Memo-ban nem is képes megjeleníteni, ha a kódot betűvé alakítom a CHR függvénnyel, de ha közvetlenül beírom, akkor helyesen jelenik meg. Mit csinálok rosszul???
Tud valaki segíteni?
Köszönöm az esetleges válaszokat.

  • Oldal:
  • 1