Maison  >  Article  >  développement back-end  >  Analyse du module de chiffrement hashlib en Python (exemple de code)

Analyse du module de chiffrement hashlib en Python (exemple de code)

不言
不言avant
2018-11-23 17:01:182000parcourir
Le contenu de cet article concerne l'analyse (exemples de code) du module de chiffrement hashlib en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Le module hashlib est un module utilisé pour chiffrer les chaînes. Le texte brut et le texte chiffré ont une correspondance biunivoque ; il est utilisé pour chiffrer les noms d'utilisateur, les mots de passe, etc. lors de l'inscription et de la connexion.

1. Analyse des fonctions

1. Il existe 5 algorithmes de cryptage

md5(), sha1(), sha224(), sha256(). , sha3840(), sha512(), obtiennent respectivement différents textes chiffrés cryptés.

2. hashlib.hexdigest() : Obtenez le texte chiffré, hexadécimal, sans paramètres

3. hashlib.digest() : Obtenez le texte chiffré, binaire, sans paramètres

4. hashlib.copy() : Copie l'objet de hachage actuellement créé, aucun paramètre

5. update(str1,encoding('utf-8'')) : Mettre à jour le chiffrement Le texte chiffré obtenu est différent de le texte chiffré d'origine

6. hash.name : Afficher l'algorithme de cryptage de l'objet de hachage actuellement obtenu

7. hash.digest_size : secret de hachage Combien d'octets la clé occupe-t-elle ?

8. hash.block_size : La taille du bloc de données de hachage

9. hashlib.algorithms_guaranteed : Afficher les algorithmes de hachage pris en charge par toutes les plateformes

10 , hashlib.algorithms_available : Tout afficher algorithmes de cryptage de hachage

Exemples de code :

import hashlib

def hash_fun_1(str1):
    #创建一个hahsh对象并对str1加密
    m=hashlib.md5(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数',m.hexdigest())
    print('获取加密的密文,二进制,无参数:',m.digest())
    print('获取hash块的大小:',m.block_size)
    print('hash密钥占多少个字节:',m.digest_size)
    print('查看当前获得的hash对象的加密算法',m.name)

    #更新密文
    m.update(str1.encode('utf-8'))
    print('获取加密的密文,16进制,无参数', m.hexdigest())
    print('获取加密的密文,二进制,无参数:', m.digest())
    print('获取hash块的大小:', m.block_size)
    print('hash密钥占多少个字节:', m.digest_size)
    print('查看当前获得的hash对象的加密算法', m.name)

if __name__ == '__main__':
    hash_fun_1('mark')

Résultat :

获取加密的密文,16进制,无参数 ea82410c7a9991816b5eeeebe195e20a
获取加密的密文,二进制,无参数: b'\xea\x82A\x0cz\x99\x91\x81k^\xee\xeb\xe1\x95\xe2\n'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5
获取加密的密文,16进制,无参数 ac673f4dbac79922838901b5974a419a
获取加密的密文,二进制,无参数: b'\xacg?M\xba\xc7\x99"\x83\x89\x01\xb5\x97JA\x9a'
获取hash块的大小: 64
hash密钥占多少个字节: 16
查看当前获得的hash对象的加密算法 md5

2. Application :

1. Il existe deux façons de créer un objet de hachage :

m=hashlib.new('md5',b'cai')#选择md5加密函数加密字符串‘cai’
m=hashlib.md5('cai'.encode('utf-8'))#加密的另一种写法

2. Utilisation des fonctionnalités : lorsque la chaîne à chiffrer est trop grande, vous pouvez utiliser le même objet de hachage pour la séparer. update(a)+update(b)=update(a+b)

Exemple :

import hashlib

m1=hashlib.md5()
m2=m1.copy()
m1.update('a'.encode('utf-8'))
m1.update('b'.encode('utf-8'))
print(m1.hexdigest())#输出密文
m2.update('ab'.encode('utf-8'))
print(m2.hexdigest())#输出另一个密文

Résultat d'exécution :

187ef4436122d1cc2f40dc2b92f0eba0
187ef4436122d1cc2f40dc2b92f0eba0

3. Cryptage de l'algorithme de hachage

Le texte chiffré obtenu par l'algorithme de cryptage est irréversible, mais la relation entre le texte chiffré et le texte brut est une correspondance biunivoque, ce qui rend le décryptage possible à l'aide du Big Data Stocke la relation entre le texte chiffré et texte en clair. S'il y a un texte chiffré correspondant dans la base de données, vous pouvez trouver le texte en clair pour terminer le décryptage. Sur le site Web de décryptage couramment utilisé : http://www.cmd5.com/, vous pouvez trouver le texte en clair correspondant en saisissant le champ. texte chiffré.

Afin d'augmenter la difficulté du crackage, il est généralement nécessaire de chiffrer le mot de passe plusieurs fois. Le module hashlib a une fonction dédiée.

Exemple de code :

import hashlib
import binascii

#sha256为算法名称,12345678为要加密的密码
#mark指的是杂质,额外添加的东西,使得破解更难
#10 000是迭代次数,可以理解为加密次数
pwd=hashlib.pbkdf2_hmac('sha256',b'12345678',b'mark',10000)
print(binascii.hexlify(pwd).decode('utf-8'))

Résultat :

129d11e9ba1f3ef4e1393516d434f356363ffe68d7baca37fd1e91f0e87abe36

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer