Maison > Article > développement back-end > Analyse du module de chiffrement hashlib en Python (exemple de code)
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!