Questo concorso è finito.
A causa della natura delle sfide dei poliziotti e ladri , la sfida dei poliziotti diventa molto più semplice quando l'interesse per la sfida dei ladri associati è diminuito. Pertanto, mentre puoi ancora pubblicare funzioni hash, la tua risposta non verrà accettata o farà parte della classifica.
Questa sfida è una ricerca per il più breve implementazione di una funzione di hash che è resistente collisione , cioè, dovrebbe essere impossibile trovare due messaggi diversi con lo stesso hash.
Come poliziotto, cerchi di inventare e implementare una funzione hash trovando il miglior compromesso tra dimensione del codice e resistenza alle collisioni. Usa troppi byte e un altro poliziotto ti supererà!
Come ladro, cerchi di sventare i tentativi degli sbirri violando le loro funzioni, dimostrando che non sono adatti. Questo li costringerà a usare più byte per rafforzare i loro algoritmi!
Sfida poliziotti
Compito
Implementa una funzione di hash crittografica H: I -> O di tua scelta, dove I è l'insieme di tutti gli interi non negativi inferiori a 2 2 30 e O è l'insieme di tutti gli interi non negativi inferiori a 2 128 .
È possibile implementare H come una funzione effettiva che accetta e restituisce un singolo intero, una rappresentazione in stringa di un numero intero o un array di numeri interi o un programma completo che legge da STDIN e stampa su STDOUT in base 10 o 16.
punteggio
H che deve resistere alla sfida dei ladri definita di seguito.
Se un ladro sconfigge il tuo invio nelle prime 168 ore dopo la sua pubblicazione, viene considerato incrinato .
L'implementazione di H dovrebbe essere il più breve possibile. La presentazione non crackata più breve sarà il vincitore della sfida della polizia.
Regole aggiuntive
Se si implementa H come funzione, fornire un wrapper per eseguire la funzione all'interno di un programma che si comporta come spiegato sopra.
Fornisci almeno tre vettori di prova per il tuo programma o wrapper (esempi di input e relativi output).
H può essere il tuo nuovo design (preferito) o un noto algoritmo, purché tu lo implementi da solo. È vietato utilizzare qualsiasi tipo di funzione hash integrata, funzione di compressione, cifratura, PRNG, ecc.
Qualsiasi built-in comunemente usato per implementare le funzioni di hashing (ad es. Conversione di base) è un gioco equo.
L'output del tuo programma o funzione deve essere deterministico.
Dovrebbe esserci un compilatore / interprete gratuito (come nella birra) che può essere eseguito su una piattaforma x86 o x64 o da un browser web.
Il vostro programma o di una funzione dovrebbe essere ragionevolmente efficiente e deve hash qualsiasi messaggio nel I di sotto del 2 2 19 in meno di un secondo.
Per i casi limite, il tempo (a parete) impiegato sulla mia macchina (Intel Core i7-3770, 16 GiB di RAM) sarà decisivo.
Data la natura di questa sfida, è vietato modificare il codice della risposta in qualsiasi modo, che cambi l'output o meno.
Se il tuo invio è stato violato (o anche se non lo è), puoi pubblicare una risposta aggiuntiva.
Se la risposta non è valida (ad es. Non è conforme alla specifica I / O), si prega di eliminarla.
Esempio
Python 2.7, 22 byte
def H(M): return M%17
involucro
print H(int(input()))
Sfida i ladri
Compito
Crack uno qualsiasi dei poliziotti osservazioni inviando quanto segue nella briganti filo : due messaggi M e N in mi tale che H (M) = H (N) e M ≠ N .
punteggio
Infrangere ogni invio di poliziotti ti fa guadagnare un punto. Vince il ladro con il maggior numero di punti.
In caso di pareggio, vince il ladro che ha spezzato la sottomissione più lunga.
Regole aggiuntive
Ogni invio di poliziotti può essere decifrato solo una volta.
Se l'invio di un poliziotto si basa su comportamenti definiti o non definiti dall'implementazione, devi solo trovare un crack che funzioni (in modo verificabile) sul tuo computer.
Ogni crack appartiene a una risposta separata nel thread dei ladri.
Pubblicare un tentativo di cracking non valido ti vieta di crackare quel particolare invio per 30 minuti.
Non puoi infrangere la tua stessa richiesta.
Esempio
Python 2.7, 22 byte dall'utente8675309
1
e
18
Classifica
Invio sicuro
Contributi non crackati
Puoi utilizzare questo frammento di stack per ottenere un elenco di risposte non ancora crackate.
function g(p){$.getJSON('//api.stackexchange.com/2.2/questions/51068/answers?page='+p+'&pagesize=100&order=desc&sort=creation&site=codegolf&filter=!.Fjs-H6J36w0DtV5A_ZMzR7bRqt1e',function(s){s.items.map(function(a){var h=$('<div/>').html(a.body).children().first().text();if(!/cracked/i.test(h)&&(typeof a.comments=='undefined'||a.comments.filter(function(b){var c=$('<div/>').html(b.body);return /^cracked/i.test(c.text())||c.find('a').filter(function(){return /cracked/i.test($(this).text())}).length>0}).length==0)){var m=/^\s*((?:[^,(\s]|\s+[^-,(\s])+)\s*(?:[,(]|\s-).*?([0-9]+)/.exec(h);$('<tr/>').append($('<td/>').append($('<a/>').text(m?m[1]:h).attr('href',a.link)),$('<td class="score"/>').text(m?m[2]:'?'),$('<td/>').append($('<a/>').text(a.owner.display_name).attr('href',a.owner.link))).appendTo('#listcontent');}});if(s.length==100)g(p+1);});}g(1);
table th, table td {padding: 5px} th {text-align: left} .score {text-align: right} table a {display:block}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><table><tr><th>Language</th><th class="score">Length</th><th>User</th></tr><tbody id="listcontent"></tbody></table>