Dieser Wettbewerb ist vorbei.
Aufgrund der Art der Cops-and-Robbers- Herausforderungen wird die Cops-Herausforderung viel einfacher, wenn das Interesse an der zugehörigen Robbers-Herausforderung nachgelassen hat. Obwohl Sie weiterhin Hash-Funktionen bereitstellen können, wird Ihre Antwort daher nicht akzeptiert oder ist Teil der Rangliste.
Diese Herausforderung ist eine Suche nach der kürzesten Implementierung einer Hash - Funktion , die ist resistent gegen Kollisionen , also sollte es nicht machbar sein , zwei verschiedene Nachrichten mit dem gleichen Hash zu finden.
Als Cop versuchen Sie, eine Hash-Funktion zu erfinden und zu implementieren, um den besten Kompromiss zwischen Codegröße und Kollisionsfestigkeit zu finden. Verwenden Sie zu viele Bytes und ein anderer Polizist wird Sie überraschen!
Als Räuber versuchen Sie, die Versuche der Bullen zu vereiteln, indem Sie ihre Funktionen knacken und beweisen, dass sie ungeeignet sind. Dies wird sie zwingen, mehr Bytes zu verwenden, um ihre Algorithmen zu stärken!
Polizisten fordern heraus
Aufgabe
Implementieren Sie eine kryptografische Hash-Funktion H: I -> O Ihrer Wahl, wobei I die Menge aller nicht negativen Ganzzahlen unter 2 2 30 und O die Menge aller nicht negativen Ganzzahlen unter 2 128 ist .
Sie können H entweder als eine tatsächliche Funktion implementieren , die eine einzelne Ganzzahl, eine Zeichenfolgendarstellung einer Ganzzahl oder eines Arrays von Ganzzahlen akzeptiert und zurückgibt, oder als ein vollständiges Programm, das aus STDIN liest und in STDOUT in Basis 10 oder 16 druckt.
Wertung
H dass sie die zu wider Räuber Herausforderung unten definiert.
Wenn ein Räuber Ihre Übermittlung in den ersten 168 Stunden nach dem Posten besiegt, gilt sie als geknackt .
Die Implementierung von H sollte so kurz wie möglich sein. Die kürzeste ungerissene Einsendung ist der Gewinner der Cops Challenge.
Zusätzliche Regeln
Wenn Sie H als Funktion implementieren , stellen Sie bitte einen Wrapper bereit, um die Funktion in einem Programm auszuführen, das sich wie oben beschrieben verhält.
Bitte geben Sie mindestens drei Testvektoren für Ihr Programm oder Ihren Wrapper an (Beispieleingaben und die entsprechenden Ausgaben).
H kann Ihr neuartiges Design (bevorzugt) oder ein bekannter Algorithmus sein, solange Sie es selbst implementieren. Es ist verboten, eingebaute Hash-Funktionen, Komprimierungsfunktionen, Chiffren, PRNG usw. zu verwenden.
Jedes zur Implementierung von Hashing-Funktionen (z. B. Basiskonvertierung) verwendete integrierte Element ist ein faires Spiel.
Die Ausgabe Ihres Programms oder Ihrer Funktion muss deterministisch sein.
Es sollte einen kostenlosen (wie in Beer) Compiler / Interpreter geben, der auf einer x86- oder x64-Plattform oder in einem Webbrowser ausgeführt werden kann.
Ihr Programm oder Ihre Funktion sollte einigermaßen effizient sein und muss in weniger als einer Sekunde eine Meldung in I unter 2 2 19 haben .
Für Edge-Fälle ist die auf meinem Computer (Intel Core i7-3770, 16 GiB RAM) benötigte (Wand-) Zeit entscheidend.
Angesichts der Art dieser Herausforderung ist es verboten, den Code Ihrer Antwort in irgendeiner Weise zu ändern, unabhängig davon, ob dies die Ausgabe verändert oder nicht.
Wenn Ihr Beitrag geknackt wurde (oder auch nicht), können Sie eine zusätzliche Antwort posten.
Wenn Ihre Antwort ungültig ist (z. B. nicht mit der E / A-Spezifikation übereinstimmt), löschen Sie sie bitte.
Beispiel
Python 2.7, 22 Bytes
def H(M): return M%17
Verpackung
print H(int(input()))
Räuber herausfordern
Aufgabe
Knacken jeden der Kopse Vorbringen durch die Veröffentlichung der folgenden in dem Räuber thread : zwei Nachrichten M und N in I , so dass H (M) = H (N) und M ≠ N .
Wertung
Wenn Sie jeden Cop-Beitrag knacken, erhalten Sie einen Punkt. Der Räuber mit den meisten Punkten gewinnt.
Bei einem Gleichstand gewinnt der Räuber, der die längste Einreichung geknackt hat.
Zusätzliche Regeln
Jeder Cop-Beitrag kann nur einmal geknackt werden.
Wenn sich ein Cop-Beitrag auf implementierungsdefiniertes oder undefiniertes Verhalten stützt, müssen Sie nur einen Riss finden, der (nachweislich) auf Ihrem Computer funktioniert.
Jeder Riss gehört zu einer eigenen Antwort im Räuber-Thread.
Wenn Sie einen ungültigen Cracking-Versuch veröffentlichen, können Sie diesen bestimmten Beitrag 30 Minuten lang nicht mehr knacken.
Sie können Ihre eigene Vorlage nicht knacken.
Beispiel
Python 2.7, 22 Bytes von user8675309
1
und
18
Bestenliste
Sichere Einsendungen
Nicht geknackte Einsendungen
Mit diesem Stapel-Snippet können Sie eine Liste der noch nicht geknackten Antworten abrufen.
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>