Szyfrowanie pliku Xorowaniem. Znak nowej linii - problem

0

Jak odbywa się szyfrowanie pliku XoRem? Ja to robię tak:

  1. Zamieniam literke na kod ASCII
  2. Xoruje
  3. wynik zmieniam na znak ASCII
    Problem jest wtedy gdy wynik Xorowania to 243 - czyli kod nowej lini.
    Po zapisaniu do pliku txt i odkodowaniu wiadomość jest urwana :(
    Jak temu zaradzić? Jak ominąć nieszczęsne 243.

Aby uniknąć błędów wyczytałem że kod znaku ASCII dobrze zamienić na HEX.

Kod znaku ASCII np 45 podstawiony pod inttohex() daje mi 2D.

Jak zamienić 2D na znak? (raczej sie nie da), więc do pliku tekstowego zapisywać np. #2D#10...
Jak potem to odczytywac i zamieniać na prawidłową literę.
Testowałem kilka opcji i cały czas mam jakieś błędy.
Gdy owe 2D chce przypisać do Sringa wywala błąd "Char and String".

2

traktuj plik jako binarny a nie tekstowy

0

Tak to dla pliku tekstowego było by dobre rozwiązanie. Ale chciałem sobie troche ułatwić i LOGINY i HASLA przechowuję w pliku INI.
i korzystając z INI.ReadString otrzymuję stringa ale do znaku nowej lini. Ktos na 4p podawał że jest to dobre rozwiązanie bo szyfruje tylko hasła.
Niestety nie podał jak sobie poradził z tymi problemami jakie ja mam. niby ASCII -> HEX ale to tworzy nowe problemy :/

[Delphi] Kodowanie pliku *.INI autor flabra

4
maxiu1989 napisał(a):

Tak to dla pliku tekstowego było by dobre rozwiązanie. Ale chciałem sobie troche ułatwić i LOGINY i HASLA przechowuję w pliku INI.
i korzystając z INI.ReadString otrzymuję stringa ale do znaku nowej lini. Ktos na 4p podawał że jest to dobre rozwiązanie bo szyfruje tylko hasła.
Niestety nie podał jak sobie poradził z tymi problemami jakie ja mam. niby ASCII -> HEX ale to tworzy nowe problemy :/

Nie za bardzo zrozumiałem, ale spróbuję wyjaśnić:
Skoro to hasełko to go nie szyfruj jakimś słabym XORem tylko pobierz sobie chociażby bibliotekę do MD5 albo SHA i je hashuj. I zapisuj tak: XXYYZZ gdzie kolejne dwa znaki to bajt zapisany szesnastokowo (Inttohex(c,2)). A oryginalny możesz odzyskać forem z StrToInt('$'+s).

1

Popieram 123, dodatkowo dane o podwyższonych wymogach bezpieczeństwa (tu hasła) w Windows powinny być przechowywane
albo:
a) w rejestrze w gałęzi HKEY_CURRENT_USER: http://pcsupport.about.com/od/termshm/g/hkey_current_user.htm
albo w katalogu użytkownika:
b) CSIDL_LOCAL_APPDATA: http://delphi.about.com/od/kbwinshell/a/SHGetFolderPath.htm
albo
c) jeśli hasła mają być dostępne dla wszystkich użytkowników - to gdziekolwiek, tylko wtedy to mizerne security - jeśli każdy może ten plik podejrzeć.

Co do MD5 to koniecznie zastosuj solenie: http://skfox.com/2007/12/18/md5-hashes-and-salt/
Bez tego można odgadnąć hasło - patrz:

W uproszczeniu sól w MD5 to (najlepiej) losowy ciąg znaków którego zastosowanie powoduje, że wartość MD5 dla dwóch różnych przypadków (użytkowników, komputerów, sesji) będzie różna nawet wtedy, gdy zastosujesz tą samą treść na wejściu (to samo hasło).

0

Bardzo Dziękuję za sporo konkretnej wiedzy i wskazówek :) Xorowanie już mi sie udało (i zapis HEX). Po prostu Przy dekodowaniu nie odczytywałem 2 kolejnych liter.
A teraz Xor spróbuję zamienić na coś lepszego. :)

0

Przede wszystkim, według mojej wiedzy, koniec linii to znaki 13 i 10, w hex odpowiednio 0D i 0A, a nie 243.

Jeżeli w pliku są tylko standardowe znaki tekstowe, to możesz posłużyć się alfabetem składającym się z 64 znaków (np. taki, jaki wykorzystuje Base64) lub 128 znaków (wszystkie znaki o kodach ASCII od 32 do 128 plus 32 dodatkowych znaków tekstowych).

Przy szyfrowaniu przetwarzasz tylko znaki należące do alfabetu, a pozostałe przepisujesz.

Ponieważ każdy znak ma swój numer niezależny od ASCII nie będzie ryzyka, że wypadnie jakiś znak specjalny. Wtedy na każdy znak przypada 6 lub 7 bitów.

Innymi słowy: Pobierasz znak z pliku, uzyskujesz numer tego znaku w alfabecie, na tym numerze robisz XOR i otrzymujesz nowy numer znaku, który wstawiasz do pliku.

0
maxiu1989 napisał(a):

A teraz Xor spróbuję zamienić na coś lepszego. :)

Nie wiem, w jakiej technologii piszesz program. Wiem, że Java i .NET oferują gotowe rozwiązania. Jak chodzi o zaszyfrowanie danych, to pomyśl o AES 128bit a jak chodzi o hash to MD5. W obu wymienionych technologiach jest jedno i drugie.

0

MD5 to cienki pomysł, bo jest krótki i ma sporo kolizji. Ja polecę SHA256 i wyżej.

0

Algorytm haszujący musi być dobry, ale dodatkowo bardzo ważne jest abyś hashe solił.

1 użytkowników online, w tym zalogowanych: 0, gości: 1