Byte-ul Posted July 4, 2014 Report Posted July 4, 2014 (edited) 1. Creati un algoritm care genereaza hashul (ceva ce nu poate fi decriptat!) pentru un string introdus de la tastatura.2. Algoritmul (functia) trebuie sa aiba maxim 40 linii de cod. Puteti avea mai multe functii atat timp cat toate functiile unite au sub 40 linii de cod.3. Algoritmul trebuie sa fie usor de rescris in alte limbaje de programare.4. Algoritmul cu cele mai putine "coliziuni" va castiga.Exemplu de coliziune: Hashul lui "asd" este "alabala", iar hashul lui "iasdnfoansd" este tot "alabala".5. Toti algoritmii vor fi testati cu ~ 5 milioane de cuvinte de diferite lungimi (acelasi set de cuvinte random).6. Nu aveti voie sa copiati algoritmi de pe net. Trebuie sa fie facut de voi. Nu puteti modifica un algoritm deja existent.7. Intrati in challenge prin postarea algoritmului aici.8. Hashul trebuie sa aiba sub 128 de biti.9. Avand in vedere ca este cam greu ca hashul oricarui cuvant sa aiba un numar fix de caractere, nu este obligatoriu acest lucru.10. Puneti si un exemplu cu hashul unui cuvant ca sa fiu sigur ca le convertesc bine pentru test!Daca aveti intrebari, postati aici.Scuzati eventualele greseli gramaticale. Edited July 5, 2014 by Byte-ul Quote
mah_one Posted July 4, 2014 Report Posted July 4, 2014 Pai tu ne zici ca castiga cel care are cele mai putine colizuni. Si daca vine unu si creaza pe 2048 de bytes:))) coliziunile vor fi 0:PBaga si tu o lungime fixa la hash. Quote
Byte-ul Posted July 4, 2014 Author Report Posted July 4, 2014 Pai tu ne zici ca castiga cel care are cele mai putine colizuni. Si daca vine unu si creaza pe 2048 de bytes:))) coliziunile vor fi 0:PBaga si tu o lungime fixa la hash.Il poti face si de 4096 de biti cat timp respecti ce e scris in primul post In fine, maxim o sa fie 128 de biti. Quote
nedo Posted July 4, 2014 Report Posted July 4, 2014 Este obligatoriu sa fie o singura functie de maxim 20 linii de cod?Eu m-am gandit la ceva, dar mai folosesc o functie de 8 linii de cod. In plus 20 de linii mi se pare cam prea putin ... Quote
Byte-ul Posted July 4, 2014 Author Report Posted July 4, 2014 Este obligatoriu sa fie o singura functie de maxim 20 linii de cod?Eu m-am gandit la ceva, dar mai folosesc o functie de 8 linii de cod. In plus 20 de linii mi se pare cam prea putin ...Ok atunci, voi mari limita la 40 linii. Nu poti comprima totul intr-o singura functie? Quote
Ganav Posted July 4, 2014 Report Posted July 4, 2014 Eu cred ca este mai bine ca limita sa fie exprimata in nr. de caractere. Poti scrie programe complexe intr-o singura linie in C/C++(lungimea liniilor nu este specificata). Quote
nedo Posted July 4, 2014 Report Posted July 4, 2014 Asi putea face cu lambda, si sa fie totul intr-o singura functie. Problema e ca daca fac cu lambda nu o sa poata fi trecuta in alte limbaje. Ca si idee, ma folosesc de fibenouci. Quote
Byte-ul Posted July 4, 2014 Author Report Posted July 4, 2014 Asi putea face cu lambda, si sa fie totul intr-o singura functie. Problema e ca daca fac cu lambda nu o sa poata fi trecuta in alte limbaje. Ca si idee, ma folosesc de fibenouci.Am modificat, poti face si mai multe functii daca iti este mai usor.Grija, nu aveti sa folositi chestii deja existente. (spre exemplu, md5 (lol), base64, etc.) Quote
Phantome1992 Posted July 4, 2014 Report Posted July 4, 2014 dea se poate scrie si in maxim 6 lini dar imi e lene daca iam pus si o keye ajung la 7 lini sub create { my $tostr = $_[0]; my @t = (4, 32, 128); my $return = ""; for(my $i=0; $i<length($tostr); $i++) { $hx = substr($tostr, $i, 1); $hxr = chr(ord($hx) + ($t[2]-$t[1]>ord($hx)?32:64) - ($t[0]**(($i%2==0)?2:1))*2); $return .= &strtohex(ord($hxr)); } return $return;}PERL (Crisalixx) 1 Quote
Byte-ul Posted July 5, 2014 Author Report Posted July 5, 2014 dea se poate scrie si in maxim 6 lini dar imi e lene daca iam pus si o keye ajung la 7 lini sub create { my $tostr = $_[0]; my @t = (4, 32, 128); my $return = ""; for(my $i=0; $i<length($tostr); $i++) { $hx = substr($tostr, $i, 1); $hxr = chr(ord($hx) + ($t[2]-$t[1]>ord($hx)?32:64) - ($t[0]**(($i%2==0)?2:1))*2); $return .= &strtohex(ord($hxr)); } return $return;}PERL (Crisalixx)Pune si hashul unui cuvant. Sa fiu sigur ca le convertesc bine pentru test. Quote
Phantome1992 Posted July 5, 2014 Report Posted July 5, 2014 print create("whatdoyouwant"); daca vrei versiunea php o sa dau un reply Quote
Byte-ul Posted July 5, 2014 Author Report Posted July 5, 2014 print create("whatdoyouwant"); daca vrei versiunea php o sa dau un replyVreau sa postezi hashul unui cuvant. Nimic altceva. Quote
Byte-ul Posted July 5, 2014 Author Report Posted July 5, 2014 (edited) 97a7929c poftim..... hashul carui cuvant e asta?//am gasit, este "word"M-am uitat peste, este mai degraba o codare decat un hash. Poti sa refaci cuvantul din acel hash. Edited July 5, 2014 by Byte-ul Quote
nedo Posted July 5, 2014 Report Posted July 5, 2014 (edited) Nevermind, e gresit. Edited July 5, 2014 by nedo Quote
Byte-ul Posted July 5, 2014 Author Report Posted July 5, 2014 (edited) Am decis sa postez si un exemplu de algoritm. (Probabil este vai de mama lui)Private Function test(ByVal s As String) As String Dim hash As String = "" Dim frst As BigInteger = 0 For i = 0 To s.Length - 1 frst += AscW(s(i)) ^ i + AscW(s(i)) * (i + 2) ^ 6 Next While frst <> 0 hash &= StrToHex(ChrW(frst Mod 10)) frst = frst / 10 End While Return hash End FunctionTestat cu 5 milioane de stringuri random. (6-20 caractere)Executia a durat 1 minut si 55 secunde.6 coliziuni gasite (12 stringuri in total)+++++++++++9255366911------------yMv0FA------------8PVzDA+++++++++++5559954453------------wXm3QQ------------Msy0QQ+++++++++++89388952942------------79Y5Fx------------o7JaEx+++++++++++5432371422------------DTmdoI------------sYMr5J+++++++++++295831655------------MvDtO7------------vOdrO7+++++++++++99751123942------------MgN4Jx------------u510LM5 Edited July 5, 2014 by Byte-ul Quote
PingLord Posted July 23, 2014 Report Posted July 23, 2014 (edited) Bag si eu o incercare :36 de linii , cod in python. Ai user input. Momentan merge doar cu caractere , nu o sa functioneze si cu cifre :#!/usr/bin/pythonimport stringinp=raw_input()rez = []for i in list(string.ascii_lowercase): rez.append(i)def fib(n): result = [] a, b = 0, 1 while b < n: result.append( a, b = b, a+b return resultpart1=fib(len(str(inp)))j=0for i in part1: j=i**imuie = []def hash(word): muie = [] word=inp inc=0 for i in word: inc+=2**int(rez.index(i)) muie.append(str(inc) + str(int(inc*j))) for i in word: muie.append(str(rez.index(i))) re=''.join(muie) diferentiator=int(re[-8:]) final=str(diferentiator) + str(re[:18]) return final print hash(inp)rezultat :root@cortex:/learning/python# ./pinglord-hash.py rstforums121813107221990None Edited July 23, 2014 by PingLord code Quote
Cryo Posted September 15, 2014 Report Posted September 15, 2014 (edited) Voi stiti macar despre ce vorbiti?Hash function - Wikipedia, the free encyclopediaA hash function is any function that can be used to map digital data of arbitrary size to digital data of fixed size, with slight differences in input data producing very big differences in output data.Deci, cerintele sunt:1) Marimea outputului trebuie sa fie fixa.2) Schimbarile mici de date trebuie sa creeze o schimbare majora sau totala in hash. Avalanche effect - Wikipedia, the free encyclopediaNereversibilitatea si rezistenta mare la coliziuni nu este necesara din punct de vedere teoretic, dar orice functie serioasa manifesta si aceste caracteristici.Alte materiale de citit:Security of cryptographic hash functions - Wikipedia, the free encyclopediaCollision resistance - Wikipedia, the free encyclopedia Edited September 15, 2014 by Cryo Quote
Byte-ul Posted September 15, 2014 Author Report Posted September 15, 2014 Voi stiti macar despre ce vorbiti?Hash function - Wikipedia, the free encyclopediaA hash function is any function that can be used to map digital data of arbitrary size to digital data of fixed size, with slight differences in input data producing very big differences in output data.Deci, cerintele sunt:1) Marimea outputului trebuie sa fie fixa.2) Schimbarile mici de date trebuie sa creeze o schimbare majora sau totala in hash. Avalanche effect - Wikipedia, the free encyclopediaNereversibilitatea si rezistenta mare la coliziuni nu este necesara din punct de vedere teoretic, dar orice functie serioasa manifesta si aceste caracteristici.Alte materiale de citit:Security of cryptographic hash functions - Wikipedia, the free encyclopediaCollision resistance - Wikipedia, the free encyclopediaAm scris in primul thread ce trebuie facut. Nu ma intereseaza sa aibe o marime fixa. Nu vrei sa il numesti hash, numeste-l altfel. Quote
Cryo Posted September 15, 2014 Report Posted September 15, 2014 Tu esti cel ce ar trebui sa-l numeasca altfel . Quote
Byte-ul Posted September 15, 2014 Author Report Posted September 15, 2014 Tu esti cel ce ar trebui sa-l numeasca altfel .Se vede ca esti pus pe cacaturi. Cat timp nu te intereseaza challenge-ul, nu posta. Simplu si la obiect. Acum pa. Quote