Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

niz znakova u niz heksadecimalnih vrijednosti

[es] :: C/C++ programiranje :: niz znakova u niz heksadecimalnih vrijednosti

[ Pregleda: 2203 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 14:20 - pre 75 meseci
Imam jedan mali problemcic s kojim se borim vec cijeli dan.
Moram da uradim AES kriptografski algoritam u openCL-u, sa svim koracima i fazama radi paralelizacije. Na pocetku trebam da ulazni tekst pretvorim
u blokove od 128bita (odnoscno matricu 4x4 heksadecimalnih vrijednosti).
Ali je problem sto ne znam kako da napravim tu matricu da sadrzi heksadecimalne vrijednosti.
Ucitao sam ulazni tekst u niz znakova (char *) i kad ih ispisem, ispise ih kao slova.
Code:

char* readFile(const char* filename)
{
    char* source;
    long length;
    FILE * f = fopen(filename, "r");
    if (f)
    {
        fseek(f, 0, SEEK_END);
        length = ftell(f);
        fseek(f, 0, SEEK_SET);
        source = (char*)calloc(length, sizeof(char));
        if (source)
            fread(source, 1, length, f);
        fclose(f);
    }
    return source;
}
int main(int argc, char* argv[]){
    char * ulaz= readFile("test.txt");
    cout<<ulaz<<endl;  //ispise normalan tekst kako je u txt falju
    long length=fileLength("test.txt");
    
    for(int i=0; i<length; i++)
    {
        cout <<hex << (int)ulaz[i]<<","; //ispisuje heksadecimalne vrijednosti koje trebam da stavim u blokove (matrice)
        
    }
}


Ovo je ulazni tekst
Code:

Finding the best price for the Lenovo Vibe P2 64GB is no easy task. Here you will find where to buy the Lenovo Vibe P2 64GB at the best price. 
Prices are continuously tracked in over 140 stores so that you can find a reputable dealer with the best price


Ovo je rezultat.

Code:

46,69,6e,64,69,6e,67,20,74,68,65,20,62,65,73,74,20,70,72,69,63,65,20,66,6f,72,20
,74,68,65,20,4c,65,6e,6f,76,6f,20,56,69,62,65,20,50,32,20,36,34,47,42,20,69,73,2
0,6e,6f,20,65,61,73,79,20,74,61,73,6b,2e,20,48,65,72,65,20,79,6f,75,20,77,69,6c,
6c,20,66,69,6e,64,20,77,68,65,72,65,20,74,6f,20,62,75,79,20,74,68,65,20,4c,65,6e
,6f,76,6f,20,56,69,62,65,20,50,32,20,36,34,47,42,20,61,74,20,74,68,65,20,62,65,7
3,74,20,70,72,69,63,65,2e,20,50,72,69,63,65,73,20,61,72,65,20,63,6f,6e,74,69,6e,
75,6f,75,73,6c,79,20,74,72,61,63,6b,65,64,20,69,6e,20,6f,76,65,72,20,31,34,30,20
,73,74,6f,72,65,73,20,73,6f,20,74,68,61,74,20,79,6f,75,20,63,61,6e,20,66,69,6e,6
4,20,61,20,72,65,70,75,74,61,62,6c,65,20,64,65,61,6c,65,72,20,77,69,74,68,20,74,
68,65,20,62,65,73,74,20,70,72,69,63,65,



Koju strukturu da napravim da bi to izgledalo ovako? I kako napraviti da bude bas blok (matrica) heksadecimalnih vrijednosti?? Jer kada ih ovako ispisujem
tretiraju se kao integeri od 4 bajta (32bita), a meni treba da to bude 1 bajt u heksadecimalnom obliku.
Mislio sam da napravim vector 2d nizova (tj matrica), ali ne znam koliko je to dobro i prakticno.

Code:

46,69,6e,64,
69,6e,67,20,
74,68,65,20,
62,65,73,74,

20,70,72,69,
63,65,20,66,
6f,72,20,74,
68,65,20,4c,

65,6e,6f,76,
6f,20,56,69,
62,65,20,50,
32,20,36,34,

47,42,20,69,
73,20,6e,6f,
20,65,61,73,
79,20,74,61,

..........





 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-92.bvcom.net.



+1064 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 15:35 - pre 75 meseci
Nisi bas jasan sta ti treba: da li hoces samo da formatizujes output ili da smestis u neku strukturu? Imas 128 bitne podatke u vidu SSE2 tipa __m128i pa tu svih 16 bajtova mozes da smestis, ali naravno mozes
da definises i niz od 16 karaktera ili niz nizova i slicno...
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 15:48 - pre 75 meseci
Trebam oboje. Malo sam konfuzno to napisao.
Trebam da tekst (niz znakova) koji ucitam kao slova (znakove), prvo pretvorim u niz heksadecimalnih vrijednosti. Pa nakon toga, od tog niza hex vrijednosti, da napravim neku strukturu ili slicno, koja ce sadrzati blokove tih hex vrijednosti.
Npr. prvi 16 hex vrijednosti (tj 128 bita) trebam staviti u matricu 4x4. Pa drugih 128bita u novu matricu i tako redom dok cijeli ulazni tekst ne podijelim u matrice (blokove).
I onda od tih matrica napraviti neku strukturu koja ce da sadrzi niz tih matric, nesto kao ArrayList-a u javi.
Jesam li sad uspio pojasniti kako treba?
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-92.bvcom.net.



+1064 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 16:18 - pre 75 meseci
Nema potrebe nista da pretvaras u hex posto se podaci vec drze u binarnom obliku, mozes da printas u hex.
Sto se tice smestanja u niz 4x4 nizova evo ti primer:
Code:

#include <vector>
#include <fstream>
#include <stdio.h>
struct Cont {
    char rc[4][4];
};
int main() {
    typedef std::vector<Cont> vec_t;
    vec_t out;
    std::ifstream ifs("data.txt");
    while(ifs) {
        out.push_back(Cont());
        ifs.read((char*)out.back().rc,16);
    }
    for(const auto& v:out) {
        puts("");
        for (int i = 0;i<4;++i){
            for(int j = 0 ;j<4;++j)
                printf(" %x",v.rc[i][j]);
            puts("");
        }

    }
}

Ovo je C++11 lako mozes da pretabas ako ti treba C++ 98 ;)
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 16:34 - pre 75 meseci
Ali kasnije sve operacije koje trebam raditi su sa hex vrijednostima. Kako to onda uraditi? Nisam toliko vjest sa C++, pa mi treba zasad vise vremena da nesto uradim.
Pogledaj prezentaciju.
Aes

Hvala za ovaj dio koda. Tako nesto sam i mislio ali nisam toliko dobar u C++.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-92.bvcom.net.



+1064 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 17:07 - pre 75 meseci
Ma to samo prezentuju u hex obliku, kompjuter radi sve binarno ;p
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 17:44 - pre 75 meseci
Jasno mi je to, nego bi mi bilo mnogo lakse da postoji neki nacin da su bas hex vrijednosti. Jer ima SubBytes korak gdje mijenjam vrijednosti na osnovu lookup tabele. Pa ce to biti malo komplikovanije. A i sve ostalo.
Nema druge nego se napatiti, kad vec u glavi nema nista :))
 
Odgovor na temu

mj7
Qt/C++

Član broj: 267364
Poruke: 75
80.120.195.*



+8 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 19:00 - pre 75 meseci
Mislim da si se skroz upetljao sa tipovima podataka i njihovom reprezentacijom. :) Kog tipa ti je ta lookup tabela?
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 21:15 - pre 75 meseci
Heksadecimalni brojevi. Problem je u tome sto ne znam kako uradio SubBytes korak. Jer mi tu trebaju hex vrijednosti da bih mogao ocitati iz tabele. Ako je npr jedan bajt 5B, moram pronaci 5 horizontalno i B uspravno i na presjeku uzeti taj broj i upisati umjesto 5B. Kontam kako to uraditi kad su druge vrijednosti. Jer bih morao izdvajati svaki nibl i gledati koja je vrijednost, pa traziti u tabeli pa onda opet pretvoriti da dobijem char.
A mozak mi se zakovao tako da nemam nekih novih ideja :)
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-92.bvcom.net.



+1064 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 21:26 - pre 75 meseci
To je bar prosto:
Code:

#include <stdio.h>
#include <string.h>
int main() {
    char table[16][16]={0}; // init with something
    char toreplace[] = "this is string to replace";
    int len = strlen(toreplace);
    for (int i = 0;i<len;++i) {
        int v = toreplace[i] >> 4;
        int h = toreplace[i] & 0xf;
        toreplace[i] = table[v][h];
    }
}
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 21:31 - pre 75 meseci
A šta je tačno problem?
Uzmeš high nibble (5) i to ti je red u S-Box-u (5 dec).
Uzmeš low nibble (B) i to je kolona u S-Box-u (11 dec).
Setuješ vrednost byte-a tamo gde si sa vrednošću byte-a iz S-Box-a sa izračunatog reda/kolone.

Ajde još jednom - ne postoji hex zapis već samo pretvaranje iz binarnog u hex.
A binarni zapis možeš da posmatraš kao hex, oct, dec, šta ti već treba.
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti25.01.2018. u 22:57 - pre 75 meseci
Citat:
dusans: A šta je tačno problem?
Uzmeš high nibble (5) i to ti je red u S-Box-u (5 dec).
Uzmeš low nibble (B) i to je kolona u S-Box-u (11 dec).
Setuješ vrednost byte-a tamo gde si sa vrednošću byte-a iz S-Box-a sa izračunatog reda/kolone.

Ajde još jednom - ne postoji hex zapis već samo pretvaranje iz binarnog u hex.
A binarni zapis možeš da posmatraš kao hex, oct, dec, šta ti već treba.


Problem je u nedovoljnom poznavanju C++. Najvise.

Citat:
Branimir Maksimovic: To je bar prosto:
Code:

#include <stdio.h>
#include <string.h>
int main() {
    char table[16][16]={0}; // init with something
    char toreplace[] = "this is string to replace";
    int len = strlen(toreplace);
    for (int i = 0;i<len;++i) {
        int v = toreplace[i] >> 4;
        int h = toreplace[i] & 0xf;
        toreplace[i] = table[v][h];
    }
}


Prosto je tebi. Meni bi malo duze trebalo da skontam to :)))
Pokusacu sada ovako kako ste predlozili. Sad vec otprilike znam kako bi trebalo ici sta. Hvala na pomoci.
 
Odgovor na temu

antraks
banja luka, Bih

Član broj: 226703
Poruke: 203
213.91.84.*



+1 Profil

icon Re: niz znakova u niz heksadecimalnih vrijednosti28.01.2018. u 22:15 - pre 75 meseci
Citat:
Branimir Maksimovic:
Nema potrebe nista da pretvaras u hex posto se podaci vec drze u binarnom obliku, mozes da printas u hex.
Sto se tice smestanja u niz 4x4 nizova evo ti primer:
Code:

#include <vector>
#include <fstream>
#include <stdio.h>
struct Cont {
    char rc[4][4];
};
int main() {
    typedef std::vector<Cont> vec_t;
    vec_t out;
    std::ifstream ifs("data.txt");
    while(ifs) {
        out.push_back(Cont());
        ifs.read((char*)out.back().rc,16);
    }
    for(const auto& v:out) {
        puts("");
        for (int i = 0;i<4;++i){
            for(int j = 0 ;j<4;++j)
                printf(" %x",v.rc[i][j]);
            puts("");
        }

    }
}

Ovo je C++11 lako mozes da pretabas ako ti treba C++ 98 ;)


Moze li nekako da ovo "punjenje" blokova bude nekako po kolonama? Da se popunjava vertikalno? Znao bih uraditi rucno ali ako znate neki mozda laksi nacin. Ili transponovati matrice (blokove)?

Napredujem polako s ostalim dijelovima. Hvala na pomoci.
 
Odgovor na temu

[es] :: C/C++ programiranje :: niz znakova u niz heksadecimalnih vrijednosti

[ Pregleda: 2203 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.