Problem ze znakami ASCII w C#.

0

Witam.

Wczytując plik z tekstem typu "‡!ť+8'Jh©ú¦«€gď6ą‹-/Ŕ”~Îć߆2Bă9Wggo=÷‹}Z<·Ŕv/3âLŔŢÓ" itd. C# źle rozpoznaje kody ASCII lub nie rozpoznaje ich wcale. Jest mi to potrzebne, gdyż muszę xorować te znaki ze znakami z tekstu jawnego aby znaleźć klucz.
Tekst wczytuje tak:

 
static public string cryptogram;
static public void wczytajkryptogram()
        {
            cryptogram = File.ReadAllText("1.txt");
        }

Pozdrawiam.

0

Wczytuj dane binarnie, bo i tak będziesz miał kłopot jeżeli w zaszyfrowanym tekście wystąpi ciąg /r/n. Do takich zadań lepszą reprezentacją jest tablica bajtów, niż łańcuch znaków (to, że w C to jedno i to samo, to nie znaczy, że w innych językach należy tak robić).

0

Wczytywałem na początku bajty i też jest problem. Zamiast niektórych znaków mam "?"

0

Ale ty nie masz tych bajtów wyświetlać. Nie każdy bajt to widzialny znak w ASCII.

1

"‡!ť+8'Jh©ú¦«€gď6ą‹-/Ŕ”~Îć߆2Bă9Wggo=÷‹}Z<·Ŕv/3âLŔŢÓ - jeśli wczytujesz to jako tekst ASCII to masz już odpowiedź dlaczego to nie działa. To musi być co najmniej utf-16.

Odpowiedź na twój problem - nie wczytuj tego do stringa.
http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx

0

No okej, wczytuje jako bajty, ale pozniej jak zapisuje do pliku to i tak jakies krzaki wychodzą.

Do tego konstruktora można dodac kodowanie, wiecie jak ?

StreamWriter swFromFile = new StreamWriter("wynik.txt", false);  
1

No okej, wczytuje jako bajty, ale pozniej jak zapisuje do pliku to i tak jakies krzaki wychodzą.

Przecież dane binarne nie nadają się do odczytania przy pomocy notatnika... Otwórz jakiś plik .exe notatnikiem, też będą krzaczki.

Do tego konstruktora można dodac kodowanie, wiecie jak ?

Wrr, www.google.pl/search?q=StreamWriter

0
Tezcatlipoca napisał(a)

Do tego konstruktora można dodac kodowanie, wiecie jak ?

Wrr, www.google.pl/search?q=StreamWriter

Sorry, jakoś tak z rozpędu napisałem.

Rzutuje te bajty na char

 
int k = cryptogram.ElementAt(i) ^ tekst.ElementAt(i);
           swFromFile.Write((char)k);

jako wynik otrzymuje klucz, ale jak xoruje później ten klucz z zaszyfrowanym tekstem to nie daje to zwykłego tekstu

0

A ten tekst zapisany był w ASCII? A jeżeli w unicode i znaki są dwubajtowe?

0

znaki nie są dwubajtowe.
Wczytałem jeszcze raz jako string, zamieniłem na int i xorowałem. Niby teraz wszytsko jest okej, ale w miejsce polskich znaków mam "?"

0

w jakim kodowaniu masz zapisany tekst? dlaczego szyfrujesz ze stringa i do stringa, zamiast do i z tablicy bajtów? gwarantuję Ci, że problem wynika z konwersji znaków po zaszyfrowaniu. rób obliczenia na liczbach, a nie literach (tzn. na tablicy bajtów, a nie na stringu), to wszystko będzie śmigać.

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