Lazarus 2.0.6 (2019.11.01.)
Letöltés

 

file Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

  • Zapapa
  • Zapapa profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 9
  • Köszönetek: 0

Zapapa válaszolt a témára: Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

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.
#2324

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 413
  • Karma: 8
  • Köszönetek: 60

Gábor válaszolt a témára: Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

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
#2323
Megköszönték: Zapapa

  • Zapapa
  • Zapapa profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 9
  • Köszönetek: 0

Zapapa válaszolt a témára: Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

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.
#2322
Mellékletek:

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 413
  • Karma: 8
  • Köszönetek: 60

Gábor válaszolt a témára: Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

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.
#2321
Megköszönték: Zapapa

  • Zapapa
  • Zapapa profilkép
  • Új fórumozó
  • Új fórumozó
  • Hozzászólások: 9
  • Köszönetek: 0

Zapapa létrehozta a témát: Titkosítás-visszafejtés - Ékezetes karakterek kódjai azonosak;

Ü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.
#2319