Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction de hachage

    19 novembre 2017 à 17:13:51

    Bonjour,

    J'ai fais une fonction de hachage.

    Qu'en penser vous ?

    Fonctionnement:

    Texte initial -> Rallongé si nécessaire.
    Texte ASCII converti en sa valeur (Uniquement les deux derniers chiffres [Ex: 122 -> 22])
    Les chiffres sont trié en 10 groupes (le n eme chiffre ira dans le groupe n%10)
    Multiplication des 10 nombres
    Découpage par groupe de 2 nombres
    Si < 10, multiplié par 6.
    Si > 62, %62
    Retranscription en fonction de l'ID suivant le tableau

    Exemple :

     - Bonjour
     - 822222220909822222225222988282222222090982222222522298828222222266111006111714
     - 1016160043333852586094668041215092722216728896690021245592075403319675200
     - 294361291997607838307051280587256072512
     - ['29', '43', '61', '29', '19', '97', '60', '78', '38', '30', '70', '51', '28', '05', '87', '25', '60', '72', '51', '2']
     - qk8qGgIVo9Bca9XXI0cp
    


    Code (Python):

    length = 20
    
    intToChar = ["s","N","m","z","1","t","b","O","R","4","0","u","p","Z","T","2","V","M","J","G","e","P","U","h","j","X","E","w","a","q","9","D","L","f","6","g","y","3","o","n","d","i","Q","k","5","H","x","l","B","W","K","c","S","A","r","7","v","Y","F","C","I","8"]
    
    def hash(text):
    	print(text)
    	val = textToVal(text)
    	print(val)
    	it = valToInt(val)
    	print(it)
    	code = intToCode(it)
    	print(code)
    	cut = intToCut(code)
    	print(cut)
    	char = cutToChar(cut)
    	return char
    
    def textToVal(text):
    	val = ''.join(str(ord(c))[-2:] for c in text)
    	if len(val) >= 46:
    		return val
    	else:
    		bonus = ""
    		j=0
    		for i in range(0,(46-len(val))):
    			j+=1
    			if j > (len(val)-1):
    				j=0
    			od = ord(val[j])%46
    			bonus += str(ord(intToChar[od]))[-2:]
    		return bonus + val
    
    def valToInt(val):
    	tabs = [[],[],[],[],[],[],[],[],[],[]]
    	i = 0
    	for v in val:
    		tabs[i].append(v)
    		i+=1
    		i=i%10
    	tfin = []
    	i = 0
    	for tab in tabs:
    		try:
    			tfin[i] = ''.join(tab)
    		except IndexError:
    			tfin.append(''.join(tab))
    		i+=1
    		i=i%10
    	
    	res = 1
    
    	for v in tfin:
    		try:
    			if v > 0:
    				res*=int(v)
    		except ValueError:
    			res=res
    
    	return res
    
    def intToCode(intval):
    	intval = int(intval)
    	i = intval%(2**int((length/10)*64))
    	return str(i)
    
    def intToCut(code):
    	tab = []
    	i = 0
    	for v in code:
    		try:
    			tab[i] += v
    		except IndexError:
    			tab.append(v)
    		if len(tab[i]) >= 2:
    			i+=1
    	return tab
    
    def cutToChar(cut):
    	res = ""
    	for v in cut:
    		v = int(v)
    		v = v%62
    		if v < 10:
    			v*=6
    		res += intToChar[v]
    	return res
    
    print(hash("Bonjour"))


    Presque toute la sécurité est base sur la complexité de retrouver les 10 facteurs qui sont multiplié. Est-ce une bonne sécurité ?

    J'ai tenté d'appliqué ces règles au mieux:

    • Le moindre changement a une grande influence
    • Longueur de la chaîne final indépendante de la longueur de la chaîne de départ.

    Cordialement,

    -
    Edité par Bhasher 19 novembre 2017 à 17:21:40

    • Partager sur Facebook
    • Partager sur Twitter

    CodeWe is an open-source live code-sharing website.

    Fonction de hachage

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown