Jump to content
Byte-ul

Hashing Algorithm - Creeaza cel mai bun algoritm!

Recommended Posts

Posted (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 by Byte-ul
Posted
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:P

Baga 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.

Posted

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 ...

Posted
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?

Posted

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).

Posted

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.

Posted
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.)

Posted

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)

  • Upvote 1
Posted
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.

Posted (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 by Byte-ul
Posted (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 Function

Testat 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 by Byte-ul
Posted (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/python

import string

inp=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 result

part1=fib(len(str(inp)))
j=0
for i in part1:
j=i**i

muie = []
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

rstforums

121813107221990

None

Edited by PingLord
code
Posted (edited)

Voi stiti macar despre ce vorbiti?

Hash function - Wikipedia, the free encyclopedia

A 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 encyclopedia

Nereversibilitatea 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 encyclopedia

Collision resistance - Wikipedia, the free encyclopedia

Edited by Cryo
Posted
Voi stiti macar despre ce vorbiti?

Hash function - Wikipedia, the free encyclopedia

A 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 encyclopedia

Nereversibilitatea 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 encyclopedia

Collision resistance - Wikipedia, the free encyclopedia

Am scris in primul thread ce trebuie facut. Nu ma intereseaza sa aibe o marime fixa. Nu vrei sa il numesti hash, numeste-l altfel.

Posted
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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...