Ce concours est terminé.
En raison de la nature des défis posés par les flics et les voleurs , le défi des flics devient beaucoup plus facile lorsque l'intérêt pour le défi des voleurs associés a diminué. Par conséquent, même si vous pouvez toujours publier des fonctions de hachage, votre réponse ne sera ni acceptée ni intégrée au classement.
Ce défi est une recherche de la mise en œuvre la plus courte d'une fonction de hachage qui est une collision résistant , à savoir, il devrait être impossible de trouver deux messages différents avec le même hachage.
En tant que policier, vous essayez d’inventer et de mettre en oeuvre une fonction de hachage pour trouver le meilleur compromis entre la taille du code et la résistance aux collisions. Utilisez trop d'octets et un autre flic vous égrenera!
En tant que voleur, vous essayez de déjouer les tentatives des flics en craquant leurs fonctions, prouvant qu'elles ne conviennent pas. Cela les obligera à utiliser plus d'octets pour renforcer leurs algorithmes!
Défi Cops
Tâche
Implémentez une fonction de hachage cryptographique H: I -> O de votre choix, où I est l’ensemble des entiers non négatifs inférieur à 2 2 30 et O l’ensemble des entiers non négatifs inférieurs à 2 128 .
Vous pouvez implémenter H en tant que fonction réelle qui accepte et retourne un entier unique, une représentation sous forme de chaîne d'un entier ou d'un tableau d'entiers ou un programme complet qui lit à partir de STDIN et imprime vers STDOUT en base 10 ou 16.
Notation
H qu’il doit résister au défi des voleurs défini ci-dessous.
Si un voleur triomphe de votre soumission dans les 168 heures qui suivent son envoi, elle est considérée comme fissurée .
La mise en œuvre de H devrait être aussi courte que possible. La soumission non fissurée la plus courte sera la gagnante du défi des flics.
Règles supplémentaires
Si vous implémentez H en tant que fonction, veuillez fournir un wrapper pour exécuter la fonction à partir d'un programme qui se comporte comme expliqué ci-dessus.
Veuillez fournir au moins trois vecteurs de test pour votre programme ou votre wrapper (exemples d'entrées et leurs sorties correspondantes).
H peut être votre nouveau design (préféré) ou un algorithme bien connu, à condition de le mettre en œuvre vous-même. Il est interdit d'utiliser une fonction de hachage, une fonction de compression, un chiffrement, un PRNG, etc.
Toute fonctionnalité intégrée couramment utilisée pour implémenter des fonctions de hachage (par exemple, la conversion de base) constitue un jeu équitable.
Le résultat de votre programme ou fonction doit être déterministe.
Il devrait exister un compilateur / interprète gratuit (comme dans Beer) pouvant être exécuté sur une plate-forme x86 ou x64 ou à partir d'un navigateur Web.
Votre programme ou fonction doit être raisonnablement efficace et doit hacher tout message en I inférieur à 2 2 19 en moins d'une seconde.
Pour les cas extrêmes, le temps (mural) pris sur ma machine (Intel Core i7-3770, 16 Go de RAM) sera déterminant.
Compte tenu de la nature de ce défi, il est interdit de modifier le code de votre réponse de quelque manière que ce soit, que cela modifie la sortie ou non.
Si votre soumission a été fissurée (ou même si elle ne l’a pas été), vous pouvez poster une réponse supplémentaire.
Si votre réponse est invalide (par exemple, si elle n'est pas conforme à la spécification d'E / S), veuillez la supprimer.
Exemple
Python 2.7, 22 octets
def H(M): return M%17
Wrapper
print H(int(input()))
Le défi des voleurs
Tâche
Crack quelconque des cops d'arguments en affichant la suivante dans les voleurs de thread : deux messages M et N en I de telle sorte que H (M) = H (N) et M ≠ N .
Notation
Craquer chaque soumission de flic vous rapporte un point. Le voleur avec le plus de points gagne.
En cas d'égalité des voix, le voleur à égalité qui a soumis la plus longue soumission est déclaré vainqueur.
Règles supplémentaires
Chaque soumission de flic ne peut être craquée qu'une seule fois.
Si une soumission de flic repose sur un comportement défini ou non défini par l'implémentation, il vous suffit de trouver une fissure qui fonctionne (de manière vérifiable) sur votre machine.
Chaque fissure appartient à une réponse distincte dans le fil du voleur.
Publier une tentative de cracking non valide vous interdit de cracker cette soumission pendant 30 minutes.
Vous ne pouvez pas craquer votre propre soumission.
Exemple
Python 2.7, 22 octets par utilisateur8675309
1
et
18
Classement
Soumission sécurisée
Soumissions non fissurées
Vous pouvez utiliser cet extrait de pile pour obtenir une liste des réponses non encore résolues.
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>