Jump to content

nedo

Active Members
  • Posts

    2065
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by nedo

  1. nedo

    Shared secret

    ea o sa le permita sa decripteze parola ta de 100 de biti. Ideea ar fii asa Creezi cheia pgp Criptezi parola cu cheia respectiva le trimiti parola criptata si jumatate din cheia pgp Cand vor sa decripteze parola vor trebui sa puna ambele bucati ale chei pgp pentru a o putea decripta. Mai departe o folosesc la fel cum ai fi folosit-o tu.
  2. nedo

    Shared secret

    creezi o cheie privata PGP/Rsa si o imparti in doua, dai unuia o parte, altuia o alta parte. Daca e cazul ceri amandorura sa isi creeze cate o pereche de chei pgp si le trimiti cheile criptate cu cheia publica a respectivulului.
  3. Cat despre transformat din tipuri fundamentale(int, double, float) in char, folosesti reinterpret_cast si marimea tipului. Spre exemplu: #include <iostream> #include <cstring> using namespace std; int main() { unsigned char* bts = new unsigned char[sizeof(double)]; // char array de marimea unui double double d = 123.45; // double-ul nostru memcpy(bts, &d, sizeof(double)); // copiem la adresa lui bts continutul adresei &d continand sizeof(double) bytes cout << bts << endl; // printam continutul array-ului bts double dd; memcpy(&dd, bts, sizeof(double)); // copiem la adresa lui dd continutul array-ului bts cu marimea sizeof(double) bytes cout << dd; return 0; } 0xff inseamna 255, intai mascheaza primi 8 biti din stanga(ii seteaza la 0) si copiaza ceea ce ramane adica ceilalti 8 biti care reprezinta prima parte a short-ului. Dupa care muta primi 8 biti din stanga, 8 biti mai la dreapta, si mascheaza biti ramasi in loc. Codul de mai jos ar trebui sa iti explice destul de clar exact ce se intampla. char asdf[3]; unsigned short s_int = 800; bitset<16> x_s_int(s_int); asdf[0] = s_int & 0xff; // preia primul byte prin mascarea celorlalti biti asdf[1] = (s_int >> 8) & 0xff; asdf[2] = '\0'; bitset<16> x_ff(0xff); cout << asdf << endl; unsigned short s; memcpy(&s, asdf, sizeof(unsigned short)); cout << s << endl; cout << "s_int =\t " << x_s_int << endl; cout << "0xff =\t " << x_ff << endl; bitset<16> x_asdf_0(asdf[0]); bitset<16> x_asdf_1(asdf[1]); cout << "s_int & 0xff; = " << x_asdf_0 << endl; cout << "(s_int >> 8) & 0xff;" << x_asdf_1 << endl; cifer este un std::string. Pentru a vedea cate bucati am impart marimea la ce am de trimis(in cazul asta in cate caractere sunt/sau cati bytes sunt) la marimea maxima a unei bucati(255); si fac calculele necesare. Mai jos un exemplu const int BUFF_SIZE = 255; // max size of the chunks unsigned char chunks = cifer.size() / BUFF_SIZE; // number of chuncks that compose our encrypted message if((chunks * BUFF_SIZE) > cifer.size()) // checking if it rounded up { chunks--; } unsigned char lastChunkSize = cifer.size() - (chunks * BUFF_SIZE); // size of the last chunk mp_sockClient->Write(&chunks, 1); // sending the number of chunks mp_sockClient->Write(&lastChunkSize, 1); // sending the size of the last chunk mp_sockClient->Write(cifer.c_str(), cifer.size()); // sending the whole encrypted message Pentru citire fac ceva de genul asta unsigned char chunks; // number of 255 bytes chunks will be received unsigned char lastChunkSize; // size of the last chunk mp_sockClient->Read(&chunks, 1); // reading number of chuncs from socket mp_sockClient->Read(&lastChunkSize, 1); // reading size of last chunk from socket // loop to read every 255 bytes chunk and append it to cifer for(int i = 0; i < chunks; i++) { char buff[255]; mp_sockClient->Read(buff, 255); cifer.append(buff, 255); } char* lastBuff = new char[lastChunkSize];// new buffer with the size of the last chunk mp_sockClient->Read(lastBuff, lastChunkSize);// readin it cifer.append(lastBuff, lastChunkSize); // apending it Pana acum nu m-am complicat insa cu biti, totusi operatiile nu ar trebui sa fie diferite atat timp cat lucrezi cu int-uri mai mici de 255 si folosesti unsigned char;
  4. Nu e asa simplu sa faci asta. Problema principala e urmatoarea, cum iti dai seama unde incepe si unde se termina o variabila si incepe alta in sir-ul tau? Daca ai date de transmis prin retea, atunci cel mai ok ar fii sa trimiti datele pe rand. Daca e vorba de vreun struct/class atunci trimiti membri, iar la celalalt capat ii citesti si construiesti un nou obiect(struct sau class). Trebuie insa sa tii cont de cum ajung datele, trebuie sa gasesti si acolo o metoda sa delimitezi ce trimiti, cand trimiti. Eu in general incerc sa fac ceva gen pachete, verific daca ce am de transmis e mai mare de 255 bytes. Daca nu este, trimit 0 pentru ca este mai mic decat 255 si dupa trimit numarul de bytes pe care trebuie sa ii citesc, dupa care trimit ce am de trimis. Daca am mai mult de 255 bytes, trimit numarul de block-uri de 255 bytes(spre exemplu am 1024 bytes de transmis), in cazul asta 4, urmat de numarul de bytes ramasi de transmis(4). Ambele numere le transmit sub forma de unsigned char(poate sa contina valori de la 0 la 255) iar cand le primesc le transform in int. Nu stiu daca e cea mai eficienta solutie sau cea mai buna, dar la ultimele programe la care am lucrat cu sockets, asa am facut si mi-a mers bine.
  5. Recap: Oracle a acuzat Google ca ar fi copiat codul lor proprietar Java si l-ar fi scris in Android. Problema nu este insa Android-ul. Google a dorit ca developeri care scriu in Java, sa poata trece la Android fara probleme. In acest caz google a incorporat API-ul Java in Android. Acest lucru le-a permis developarilor sa isi converteasca aplicatiile la android. Oracle sustine ca API-ul intra sub incinta Copyright-ului. Totusi in procesele precedente judecatorii au hotarat ca API-ul nu intra sub incidenta legilor Copyright-ului. Totusi vineri(9.05.2014) o curte de apel a hotarat ca API-urile INTRA sub incidenta Copyright-ului. Aceasta hotarare a alertat intreaga industrie. Hotararea este o greseala epocala care poate duce la o gramada de litigii frivole. Sursa in engleza
  6. in cel mai bun caz cineva din reteaua ta se da drept yahoo si probabil ti-a furat deja datele de logare. In cel mai rau caz este doar o incercare jalnica de a capata ceva atentie. Daca vrei atentie iti sugerez sa inveti una alta, sa faci un proiect pentru comunitate si atentia o sa vina de la sine.
  7. Eu nu inteleg partea cu get_time de la youtube_link, cum adica? Luam ce timp are clipul?(41 de secunde) sau ora la care a fost incarcat(nici nu stiu daca o arata pe undeva) sau ce anume?
  8. Good to hear. Daca mai ai nevoie de ajutor posteaza aici.
  9. Ai verificat daca se fac conexiunile cum trebuie? Verifica, eventual verifica si daca dupa ce creezi o conexiune si o inchizi, serverul raspunde la alte conexiuni. Iar despre exceptie imi faceam griji deoarece ma gandesc ca exista posibilitatea ca atunci cand e apelata exceptia aia, iti inchide serverul, nu am lucrat cu exceptii/trow prea mult si nu stiu exact cum se comporta. De asemenea sugerez sa faci un test ceva ca sa nu printeze mereu aceeasi chestie, pentru ca, daca am citit bine, ar trebui sa iti dea exceptia aia o data pe secunda.
  10. Incearca sa pui un timeout la Accept. Aici spune ca .Accept poate sa accepte un timer pentru timeout. Sugerez sa folosesti 100 pentru timeout, dupa care chemi Thread.Sleep(900); Teoretic ar trebui sa nu mai consume decat 10% din puterea respectiva. Le. Daca ma gandesc mai bine, cred ca nu e ok cum am spus eu, pentru ca o sa dea Exceptie. while(true) { try { Thread.Sleep(900); bt_socket = bt_conn.accept(100); new Thread(new BtSocket(bt_socket)).start(); } catch (Exception e) { e.printStackTrace(); } }
  11. Daca e facut in java, dupa ce verifici pui un Thread.sleep(1000);, in felul asta in loc sa consume verifice dupa conexiuni de 10000 ori pe secunda, verifica doar 1 data pe secunda, in felul asta bateria ar trebui sa tina mult mai mult deoarece procesorul/memoria nu sunt utilizate in timpul in care threadul "doarme". In cazul in care nu este java, ci alt limbaj, incearca sa cauti sa vezi daca limbajul respectiv are o functie similara.
  12. Pentru ca este un utilizator inutil pentru comunitate, pentru carding, ieri cerea pe chat informatii despre carti de credi/carti de credit expirate, pentru ca nu respecta regulamentul.
  13. nedo

    Distributii Linux

    Stiu ca oricare din aceste distributii poate fi folosit pe post de server, doar ca centos este mai recomandat pentru a tine un server deoarece este mai stabil, pe cand celelalte distributii sunt mai generale si mai usor de folosit.
  14. nedo

    Distributii Linux

    Debian, Open suse, fedora core. Depinde ce vrei sa faci cu acel sistem de operare. Daca vrei sa il folosesti pentru webserver ceva similar, atunci mai bine mergi pe centos si instalezi cum si ce vrei. Daca vrei ceva similar cu windows-ul atunci poti folosi primele 3 distributii fara probleme. PS. intotdeauna instaleaza intai windows-ul. Dupa aceea instalezi oricare din distributii linux .
  15. Ca o idee, deoarece esti "dependend" de winrar, iti sugerez sa adaugi si executabilul winrar sau eventual sa folosesti alt dezarhivator cmd portabil pe care sa il incluzi in folderul aplicatiei. In felul asta eviti diverse probleme, cum ar fi spre exemplu situatii in care un utilizator nu are winrar, sau il are instalat in alta parte, sau pe windows vista/7/8/8.1 daca are versiunea de 64 de biti a sistemului de operare dar are winrar versiunea pe 32 de biti, atunci win rar se va gasi in /Program File (x86)/ caz in care aplicatia ta nu il va gasi.
  16. Incearca sa faci un factory reset intai, si incearca iar sa urmezi pasii. Dupa factori reset ar trebui sa ai optiunea respectiva in meniu. asta asa zice aici. Eventual poti sa treci prin posturile celor de pe acel forum, topicul este aici
  17. Daca este vorba de proiecte ce pot fi facute in c/c++ si sunt in aria mea, limitata, de cunostinte de programare, eu sunt dispus sa lucrez la ele.(In felul asta asi mai obtine experienta in lucrul in echipa).
  18. Am reusit sa fac ceva, sper doar sa poti adapta pentru ce ai tu nevoie(vezi ca incarcarea pagini cu wx.html2.WebView dureaza cateva secunde, si de asemenea implementarea webView depinde de sistemul de operare. Pe windows e implementat sa foloseasca dll-urile IE Pe linux foloseste webKitGTK+ Pe macos foloseste OSxWebKit iti postez un mic exemplu de test(probabil are vreo 2 erori + ca ai un main loop and stuff. Pentru a putea implementa instantia webview ai nevoie de un frame parinte care sa il tina, insa nu e obligatoriu sa il si arati(cum fac eu). Output-ul de la self.brsr.GetPageText este sub forma de string, si poti face pe el, orice operatie. import wx import wx.html2 import wx class Example(wx.Frame): def __init__(self, *args, **kw): super(Example, self).__init__(*args, **kw) self.InitUI() def InitUI(self): self.brsr = wx.html2.WebView.New(self) self.brsr.LoadURL('http://www.auction.com/search?search=deltona+fl&auction_type=residential') self.Bind(wx.html2.EVT_WEBVIEW_LOADED, self.OnLoaded) def OnMove(self, e): x, y = e.GetPosition() self.st1.SetLabel(str(x)) self.st2.SetLabel(str(y)) def OnLoaded(self, e): if(not self.brsr or self.brsr.IsBusy()): return print self.brsr.GetPageText() def main(): ex = wx.App() Example(None) ex.MainLoop() if __name__ == '__main__': main()
  19. nedo

    Carte C/C++

    Cartea este ok, dar este cam plicticoasa pentru ca este o carte de referinta, nu este o carte de introducere in programare, este o carte care prezinta limbajele c/c++, sintaxa lor si functiile/clasele din libraria standard. Daca vrei sa folosesti cartea pentru a invata sa programezi, iti sugerez sa alegi alta carte care sa te invete si bazele programari. Daca deja cunosti cel putin un limbaj de programare atunci cartea te va invata sintaxa si librariile standard ale c/c++. le @StrXt a mea e in biblioteca
  20. E amuzant, ca in aceeasi zi am vazut asta, si cu vreo cateva ore inainte am ascultat un ebook foarte interesant al lui Asimov. Si anume The last question(ultima intrebare). Imi pare ca wolfram alfa , matematica si wolfram language par a semana cu Mutivac.
  21. Eu personal folosesc Code::Blocks cu libraria wxWidgets. Codeblocks si wxWidgets are variante atat pentru linux cat si pentru windows.(Wxwidgets are port chiar si pentru mac, dar inca nu este foarte stralucit). De asemenea proiectele pot fi trecute dintr-o parte in alta cu un minim de efort. Spre exemplu poti sa verifici proiectul meu de Chat criptat, gasesti acolo atat proiectul de linux, cat si de windows.
  22. nu, faci un mebru doar Database m_db; astuia ii atribui in constructor sau prin o functie separata valoarea primei Database pe care ai initializat-o tu unde ai initializat-o.
  23. Din cate stiu, chestiile valabile in c++ sunt in mare valabile si in java. Creaza un membru de tipul Database in Guilogon, si fie pasezi in constructor Database-ul pe care tu l-ai creat, fie crezi o functie separata care sa faca asta. daca doresti sa folosesti o functie separata aceasta presupun ca ar trebui sa arate ceva degenul public void SeteazaDatabase(Database db) { m_db = db; // m_db fiind membrul din clasa GUILOGIN }
  24. Eu am votat da, de ce? Pentru ca este un exemplu de "Asa nu". Pentru ca este un copil rasfatat, pentru ca de fiecare data cand intra pe chat cere sa aiba si el "culoare" ca doar ele e valium. E pacat, este foarte probabil ca cine a spus pe aici ca are probleme cu capul, are dreptate. La fel ca si data trecuta, o astfel de situatie poate sa puna o alta pata pe aceasta comunitate. Vreti sa sustineti asta? Ganditi-va altfel, un alt pusti care abea invata, vede posturile lui, vede ceea ce a facut si comunitatea nu a facut nimic impotriva lui. Ce credeti ca va gandi acel copil? Ce credeti ca vor gandi cei care vizitaza comunitatea? Deci in comunitatea asta se permite asa ceva. Asta vor gandi. Ceea ce a facut el nu se face. Nu ar fi fost o problema daca facea treaba asta in spatiul lui, pe forumul lui. Dar postant chestiile alea pe acest forum, ne-a implicat si pe noi. Iar asta ne da dreptul sa facem acest lucru. Ganditi-va asa. Un amic vine in casa voastra si se lauda ca a facut ceva rau, ilegal. Se duce si se lauda si altora ca v-a spus voua. Cand este tras de maneca, o sa fiti si voi tras de maneca, pentru ca nu ati spus nimic. Asta se intampla si aici.
  25. daca au un site, iti sugerez sa ii contactezi si sa le explici ca ai formatat calculatorul, vor trebui sa iti reseteze licenta. Cel mai probabil asta se intampla deoarece aplicatia atunci cand este instalata trimite ceva date despre calculator care se schimba atunci cand sistemul de operare este reinstalat.
×
×
  • Create New...