Hex->Krzak, Krzak->Hex (Komunikacja)

0

Witojcie. Chciałbym się dowiedzieć jak zamienić hex'a na taką wartość, żeby zajmowała tylko 4 bajty(32 bity) we wskaźniku char, gdyż zamieniając to jawnie zajmuje 8 bajtów. Zaś nie jawnie, tak jak wspomniałem tylko 4 bajty czyli o połowę mniej co w wyniku wartość ta będzie krzakiem.

Chciałbym również dowiedzieć się jak precyzyjnie zamienić tego krzaka na dokładną wartość hex. Będę baaardzo wdzięczny za pomoc, gdyż bawię się komunikacją pomiędzy klientem i serwerem, a krótkie komunikaty są dla mnie bardzo ważne - zarazem optymalne przy dużej ilości otrzymywanych/wysyłanych wiadomości oraz niejawne wartości są przestrogą do bezpieczeństwa :)

0

Możesz jakieś przykłady podać? Co to jest "krzak" i "hex"?

0

Może mam zaćmienie, ale nie wiem o co Ci chodzi... Chcesz zamienić np. tekst "A9" (16 bitów) na odpowiadającą mu liczbę 169 (8 bitów) i odwrotnie?
PS. Z góry sorry jeśli nie zrozumiałem.

edit - @up też chyba nie rozumie ;)

0

Hmm. To może tak powiem. Na przykładzie pliku exe. Jeśli sobie go otworzymy, przeczytamy i wyświetlimy to mamy masę krzaków (a i nich zawartość to bity - hexy). I ja w podobnież sposób chciałbym odczytać se dane. Tyle, że po zamienieniu hex'a na takiego krzaczka, chcę uzyskać takim sam hex przed jego zamienieniem, próbowałem na różne sposoby i nie wyszło. Tyle :)

Główny schemat:

  1. Hex convert to krzak
  2. Krzak convert to Hex
0

Hmmm... Może chodzi mu o konwersję danych z szesnastkowych na binarne?

erykson napisał(a)

Witojcie. Chciałbym się dowiedzieć jak zamienić hex'a na taką wartość, żeby zajmowała tylko 4 bajty(32 bity) we wskaźniku char, gdyż zamieniając to jawnie zajmuje 8 bajtów. Zaś nie jawnie, tak jak wspomniałem tylko 4 bajty czyli o połowę mniej co w wyniku wartość ta będzie krzakiem.

Chciałbym również dowiedzieć się jak precyzyjnie zamienić tego krzaka na dokładną wartość hex. Będę baaardzo wdzięczny za pomoc, gdyż bawię się komunikacją pomiędzy klientem i serwerem, a krótkie komunikaty są dla mnie bardzo ważne - zarazem optymalne przy dużej ilości otrzymywanych/wysyłanych wiadomości oraz niejawne wartości są przestrogą do bezpieczeństwa :)

Np. ma jakieś dane jako łańcuchy znaków w formacie szesnastkowym i chce to przesłać binarnym protokołem po sieci.
Albo poprzez "hex" rozumie wartości liczbowe i chce to zamienić na binarną reprezentację do przesłania przez sieć. Np. ma longa na x86-64, którego przekształca na postać binarną w native-aligned (i dostaje 8 bajtów) zamiast po sieciowemu do BE (gdzie dostałby 4 bajty) i się zastanawia co się dzieje.
Albo najadł się grzybków i napisał cokolwiek.

Zastanawia mnie to "niejawne wartości są przestrogą do bezpieczeństwa"... nawet pomijając już, że to zdanie jest bez sensu.

0
erykson napisał(a)

Hmm. To może tak powiem. Na przykładzie pliku exe. Jeśli sobie go otworzymy, przeczytamy i wyświetlimy to mamy masę krzaków (a i nich zawartość to bity - hexy). I ja w podobnież sposób chciałbym odczytać se dane. Tyle, że po zamienieniu hex'a na takiego krzaczka, chcę uzyskać takim sam hex przed jego zamienieniem, próbowałem na różne sposoby i nie wyszło. Tyle :)

Główny schemat:

  1. Hex convert to krzak
  2. Krzak convert to Hex

Bity != hexy
Hex to jest reprezentacja szesnastkowa jakiejś liczby. To, że hexedytory Ci wyświetlają zawartość plików binarnych jako ciągi liczb szesnastkowych nie oznacza, że tak to jest zapisane w pliku. To, co odczytasz z pliku jest już "krzaczkiem". Nic nie musisz zamieniać, chyba że chcesz wyświetlić odczytaną z pliku wartość w formacie szesnastkowym i na odwrót, ale piszesz coś o przesyłaniu danych przez sieć, więc to chyba nie to.

EDIT: Myślę, że potrzebujesz sobie poczytać o zapisie danych do plików, czy komunikacji sieciowej na poziomie binarnym. Zacznij od wygooglania "binary format" czy czegoś w tych okolicach i czytaj, czytaj, czytaj.

0

O jezu, po co ja pisałem o tym pliku. Mi nie chodzi o przesyłanie plików i bawienie się ich pamięcią. Po prostu gdy zdeklaruje sobie liczbę 32 bitową np (0xABCDEF01) chcę zamienić ją na krzaka, a później zwrócić ten sam adres czyli - ABCDEF01 gdyż chcę monitorować serwerem każdą oddzielną sekwnecja. Każdy hex to każda inny rozdział po prostu. Gdybym użył czystego tekstu to by było chyba niebezpiecznie, nieprawdaż? Nie wiem na jakich zasadach bazuje np. Skype, GG, (które wiedzą co i kiedy ma przesłać albo tekst, albo image) ale myślę, że takie cosik jest chyba dobre.

0

Jeśli zadeklarujesz sobie liczbę 32 bitową to będzie ona zajmowała 32 bity i nie będzie tekstem.

Krzaki to bajty (albo liczby, zależy jak na to patrzeć) widziane notatnikiem i nie ma w nich nic magicznego (http://pl.wikipedia.org/wiki/ASCII <0;31> + <128; 255>)

Sorry, dalej nie rozumiem :|

Każdy hex to każda inny rozdział po prostu


   hex  ......  to .
   .           .  .   .
  .           .    .     .
 .      po prostu   .     inny
każdy              każda      .
                               .
                                .
                               rozdział
0

Chyba nie do końca wiesz o czym mówisz. Wytłumacz co znaczy zamienić na krzaka? Mam wrażenie że ogromna liczba osób z tego typu pytaniami nie rozróżnia przechowywania danych w pamięci od ich wyświetlania.
To że jakaś liczba jest wyświetlana w postaci szesnastkowej(hex) 0xABCDEF01 nie ma wpływu na to jak jest przechowywana w pamięci

0

Dobra prościej... Mamy tak: send(socket,bufor,length), a hex'a chcę umieścić w buforze, tyle tylko, że nie chcę, żeby był on widzialny po drugiej stronie, czyli po jego wypisaniu będzie jawnie wypisany adres, który przesłałem w postaci ciągu znaków. No nie wiem, może istnieje jakiś inny sposób, tak aby móc niejawnie przesyłać wiadomości, a później przywracanie jej rzeczywistej postaci i porównywanie wartości. Pliki np. nie są jawnie wypisane w sposób "dobra tutaj niech stoi literka D".

Tutaj teoretyczna konstrukcja komunikatu:

WIADOMOSC ODKOGO TRESC


0xDDDDDDDD (jawny identyfaktor usera) (tutaj chyba zrobię na zasadzie hashowania)

Czyli 0xDDDDDDDD to taki przedrostek identyfikujący rodzaj komunikatu, czy to jest zwykła wiadomość (czat), czy też jakiś inny np. status usera (dostępność).

Przykłady:
0xBBBBBBBB - status
0xCCCCCCC - wiadomość czatowa
0xDDDDDDD - jeszcze coś innego

0

Rozumiem, że chodzi ci o to, że chcesz przesyłać dane przez sieć w sposób bezpieczny i kombinujesz z jakimiś krzakami i innymi drzewami, żeby uzyskać "bezpieczeństwo"? W któreś części coś takiego wyczytałem/zrozumiałem. Jeżeli chodzi o bezpieczeństwo to po prostu zastosuj kodowanie, RSA jest fajne i stosowane w komunikatorach, np. opartych o protokół Jabbera.

2
eryk napisał(a)

O jezu, po co ja pisałem o tym pliku. Mi nie chodzi o przesyłanie plików i bawienie się ich pamięcią. Po prostu gdy zdeklaruje sobie liczbę 32 bitową np (0xABCDEF01) chcę zamienić ją na krzaka, a później zwrócić ten sam adres czyli - ABCDEF01 gdyż chcę monitorować serwerem każdą oddzielną sekwnecja. Każdy hex to każda inny rozdział po prostu. Gdybym użył czystego tekstu to by było chyba niebezpiecznie, nieprawdaż? Nie wiem na jakich zasadach bazuje np. Skype, GG, (które wiedzą co i kiedy ma przesłać albo tekst, albo image) ale myślę, że takie cosik jest chyba dobre.

Odnoszę wrażenie, że nie masz pojęcia co to jest format binarny. Rozumiem, że masz jakąś liczbę, której reprezentacja w systemie szesnastkowym to 0xABCDEF01 i chcesz jej reprezentację binarną ("krzaczki"), ale później zaczynają się jakieś bzdury. Mylisz wartości liczb z adresami, albo używasz niewłaściwych nazw na określenie niewłaściwych rzeczy. Wygląda też na to, że masz niewłaściwe pojęcie o bezpieczeństwie jeśli sugerujesz, że zamiana liczby zapisanej w postaci ASCII na wartość binarną uchroni Cię przed jej odczytaniem przez osoby trzecie.
Po kolei (albo sobie wybierz czego nie rozumiesz):

  1. Dane w pamięci operacyjnej ("gdy zadeklaruję sobie liczbę 32 bitową") czy plikach są przechowywane jako ciągi liczb w postaci binarnej, nawet jeśli jest to plik tekstowy, gdyż format i rodzaj pliku/zakresu w pamięci jest "kwestią umowną" i znajduje się na wyższej warstwie abstrakcji. Jeśli wyświetlisz sobie taki plik (lub fragment pamięci) w jakimś edytorze, to zobaczysz krzaczki oraz tzw. znaki drukowalne, gdyż w standardzie ASCII każdy znak ma przyporządkowaną jakąś wartość liczbową z zakresu 0-255 (czyli wszystkie wartości jakie może przechować jeden bajt). Jeśli w pliku binarnym dany bajt będzie miał wartość, do której jest przypisany jakiś znak z zakresu ASCII, edytor wyświetli Ci ten znak, ale to nie znaczy że w tym miejscu jest zapisana ten "krzaczek", lecz że ten bajt ma taką wartość, a on sam może być nawet częścią jakiejś struktury (np. liczby 32-bitowej).
  2. Reprezentacja liczby w systemie szesnastkowym (hex) jest tylko reprezentacją, tak samo jak w systemie dziesiętnym reprezentacją jest np. "24". Zatem, jeśli w pamięci (lub pliku) masz bajt o wartości 24, to:
  • w systemie dziesiętnym będzie on przedstawiony jako "24",
  • w systemie szesnastkowym jako "0x18",
  • w systemie ósemkowym jako "030"
  • itd.
    Czyli "gdy zdeklaruje sobie liczbę 32 bitową np (0xABCDEF01)" znaczy dokładnie to samo co "gdy zdeklaruje sobie liczbę 32 bitową np (2882400001)". Różnica polega na tym, że w pierwszym przypadku wartość jest pokazana w systemie szesnastkowym, a w drugim - dziesiętnym, ale to jest ta sama wartość.
  1. "Krzaczki" to nie jest nic innego jak zaprezentowanie wartości jako znaków ASCII. Jeśli otworzysz sobie plik binarny w Notatniku, zobaczysz krzaki, gdyż edytor ten zakłada, że będziesz odczytywał plik, w którym zapisane wartości są w tablicy ASCII przypisane do tzw. "znaków drukowalnych" oraz "znaków sterujących", np. liter, cyfr, znaków przestankowych czy znaków nowej linii (przykładowo literka "a" jest przypisana do wartości 97 i jeśli w danym miejscu bajt będzie miał taką wartość, zostanie wyświetlone w tym miejscu "a"). Pozostałe krzaki to "znaki niedrukowalne", gdyż każdej wartości jest przypisany jakiś "krzaczek".
  2. Adres jest to numer "komórki w pamięci" i często jest przedstawiany w systemie szesnastkowym. Każdy adres jest jakąś liczbą 32- (w systemach 32bit) lub 64-bitową (w systemach 64bit), ale nie każda liczba 32- lub 64-bitowa jest adresem, nawet jeśli ją zapiszesz w systemie szesnatkowym. Jeśli chcesz przesłać jakąś wartość z jednego komputera na drugi po sieci, to musisz przesłać ją a nie adres w pamięci gdzie ona jest przechowywana, gdyż adres ten jest lokalny dla maszyny i procesu (drugi komputer nie ma dostępu do pamięci pierwszego i nie wie co się tam znajduje pod danym adresem).

Wracając do Twojego wpisu:
"gdyż chcę monitorować serwerem każdą oddzielną sekwnecja" - to zdanie jest bez sensu i naprawdę nie wiadomo o co chodzi. Co rozumiesz przez "monitorować"? Co to jest "każda oddzielna sekwencja"? My tego nie wiemy, musisz sam nam to powiedzieć.

"Każdy hex to każda inny rozdział po prostu" - jaki rozdział? Co to są te "rozdziały"?

"Gdybym użył czystego tekstu to by było chyba niebezpiecznie, nieprawdaż?" - owszem, ale zamiana czystego tekstu na postać binarną nijak Ci tego bezpieczeństwa nie zapewnia. Bezpieczeństwo w sieciach zapewnia szyfrowanie.

"Nie wiem na jakich zasadach bazuje np. Skype, GG, (które wiedzą co i kiedy ma przesłać albo tekst, albo image) ale myślę, że takie cosik jest chyba dobre." - to definiuje protokół, czyli zestaw zasad i opis formatu wymienianych informacji. Skype ma jakiś protokół, GG ma inny, przeglądarka WWW ma jeszcze inny.

0

No właśnie, zauważając moje zdania w tej kwestii nie trudno się chyba domyśleć, że nie jestem fachowcem w zabezpieczeniach i ochronie. A kolega wyżej nie musiał się tyle napocić, bo to mi jest wszystko znane... Jedynie problem w tym, że myślałem, że każdy krzak odpowiada za swój osobisty hex (z poza listy ASCII 127 bitowej) i dokładnie każdy "krzak" dokładnie za jakiś hex w pamięci aplikacji. Teraz chyba jasno się wypowiedziałem. Dobra zajrzę co to RSA i mam pytanie czy znacie jeszcze jakieś osobiste metody na zabezpieczenie tego typu aplikacji?

0
eryk napisał(a)

No właśnie, zauważając moje zdania w tej kwestii nie trudno się chyba domyśleć, że nie jestem fachowcem w zabezpieczeniach i ochronie. A kolega wyżej nie musiał się tyle napocić, bo to mi jest wszystko znane... Jedynie problem w tym, że myślałem, że każdy krzak odpowiada za swój osobisty hex (z poza listy ASCII 127 bitowej) i dokładnie każdy "krzak" dokładnie za jakiś hex w pamięci aplikacji. Teraz chyba jasno się wypowiedziałem. Dobra zajrzę co to RSA i mam pytanie czy znacie jeszcze jakieś osobiste metody na zabezpieczenie tego typu aplikacji?

No właśnie problem w tym, że nie jest Ci to znane, albo wydaje Ci się, że to rozumiesz lecz brniesz dalej w błędy. Hex, "krzak" i liczba to jedno i to samo, tylko inaczej... pokazane. Jeśli zadeklarujesz sobie jakąś liczbę, np. 97, to chcąc ją zapisać (w edytorze, na kartce, na forum) jako hex napiszesz "0x61", a jeśli jako krzaczek - "a". W pamięci komputera to i tak będzie zapisane inaczej.

eryk napisał(a)

Jedynie problem w tym, że myślałem, że każdy krzak odpowiada za swój osobisty hex (z poza listy ASCII 127 bitowej)

Ależ właśnie dokładnie tak jest. Hex to jest jakaś liczba pokazana w systemie szesnastkowym, a każdy "krzaczek" jest przypisany do jakiejś wartości i nie ma tu znaczenia czy tę wartość okażesz w postaci heksadecymalnej, dziesiętnej czy jako sekwencję dźwięków wygrywanych na kobzie przez wstawionego górala z ciupagą w plecach. Musisz zrozumieć rozróżnienie między wartością, a jej reprezentacją.

eryk napisał(a)

mam pytanie czy znacie jeszcze jakieś osobiste metody na zabezpieczenie tego typu aplikacji?

Zależy co rozumiesz przez "osobiste metody" i co chcesz zabezpieczać. Jeśli chcesz zabezpieczyć transmisję między dwoma komputerami w sieci, to możesz sam bawić się w szyfrowanie, np. przy pomocy RSA, ale obie strony muszą znać klucz. Bezpieczniejsze jest użycie infrastruktury PKI, gdzie strony wymieniają między sobą jedynie klucze publiczne, których kompromitacja (np. jeśli wpadną w niepowołane ręce, o ile w przypadku kluczy publicznych jakieś ręce są niepowołane) nie spowoduje, że napastnik będzie w stanie odszyfrować dane. Możesz sam to obsługiwać, albo użyć warstwy SSL czy szyfrowania PGP.
Biorąc pod uwagę Twoje pytania proponowałbym raczej rozpocząć od czegoś innego. Szyfrowanie i przesyłanie danych poprzez sieć to dość skomplikowane zagadnienia.

0
Kumashiro napisał(a)

Zależy co rozumiesz przez "osobiste metody" i co chcesz zabezpieczać. Jeśli chcesz zabezpieczyć transmisję między dwoma komputerami w sieci, to możesz sam bawić się w szyfrowanie, np. przy pomocy RSA, ale obie strony muszą znać klucz.

OK, to jest bzdura bez sensu... Potrzebuję kawy, a do czasu aż się jej nie napiję, nie gadam z Wami...

0

Mam dla ciebie wspaniałą radę. Spróbuj opisać swój problem bez używania słów "hex" i "krzak". Może wtedy ktoś zrozumie. Jak na razie wszystkie twoje posty przyprawiają o ból głowy.

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