zoukankan      html  css  js  c++  java
  • 【转】python模块分析之hashlib加密(二)

    【转】python模块分析之hashlib加密(二)

    hashlib模块是用来对字符串进行hash加密的模块,明文与密文是一一对应不变的关系;用于注册、登录时用户名、密码等加密使用。
    一.函数分析:
    1.共有5种加密算法:
    md5(),sha1(),sha224(),sha256(),sha384(),sha512(),分别得到不同的加密密文。
    2.hashlib.hexdigest():获取加密的密文,16进制,无参数。
    3.hashlib.digest():获取加密的密文,二进制,无参数。
    4.hashlib.copy():复制一份当前创建的hash对象,无参数。
    5.update(str1.encode("utf-8")):更新加密的密文,得到的密文与原来的密文不相同。


    hash.name:查看当前获得的hash对象的加密算法;

    hash.digest_size:hash密文占多少个字节;

    hash.block_size:hash数据块的大小。

    hashlib.algorithms_guaranteed:查看所有平台都支持的hash算法;

    hashlib.algorithms_available:查看所有的hash加密算法。


    二。运用:
    1.创建哈希对象,有两种方式:
    m = hashlib.new("md5",b"cai") # 选择md5加密函数加密字符串“cai”
    m = hashlib.md5("cai".encode("utf-8")) # 加密的另一种写法

    2.特殊用法:当需要加密的字符串过大的时候,可以使用同一个hash对象分多次加密,update(a)+update(b)=update(a+b).
    举例:

    1 m = hb.md5()
    2 m1 = m.copy()
    3 m.update("a".encode("utf-8"))
    4 m.update("b".encode("utf-8")) 
    5 print(m.hexdigest()) # 输出密文1
    6 m1.update("ab".encode("utf-8"))
    7 print(m1.hexdigest()) # 输出与密文1完全相同的密文2

     三、hash算法的解密

    加密算法得到的密文不可逆,但是密文与明文之间的关系是一一对应的,这就使得解密出现了可能,目前对于简单的、迭代次数少或不加盐处理密文,常用

    方法是用大数据储存密文与明文的对应关系。

    如常用的解密网站:http://www.cmd5.com/

    通过输入密文查找对应的明文。

    为了增大破解的难度,一般需要对密码进行多次迭代加密和加盐处理,hashlib模块有一个专门的函数。

    1 import hashlib as hb
    2 import binascii
    3 #  sha256为算法名称,123456789为要加密的密码,
    4 # salt指的是杂质,额外的东西,使得更加难破解,10000是迭代次数,可以理解成加密次数。
    5 dk = hb.pbkdf2_hmac('sha256', b'123456789', b'salt', 10000)  # 密码和杂质都需要是二进制类型
    6 print(binascii.hexlify(dk).decode("utf-8"))

    代码举例:

     1 import hashlib as hb
     2 
     3 
     4 def hash_fun(str1):
     5 m = hb.md5(str1.encode("utf-8")) # 创建一个hash对象,并对str1加密
     6 print(m.hexdigest()) # 输出得到的密文
     7 m.update(str1.encode("utf-8")) # 更新密文
     8 print(m.hexdigest()) # 输出更新密文,与前面不再相同
     9 print(m.digest()) # 获取字节密文
    10 print(m.block_size) # 获取hash块的大小
    11 print(m.digest_size) # 获取密文的字节数
    12 print(m.name) # 获取加密算法的名字md5
    13 
    14 
    15 def hash_fun2(str1):
    16 m = hb.md5(str1.encode("utf-8"))
    17 print(m.hexdigest())
    18 a = m.copy() # 拷贝一个hash对象
    19 print(a.hexdigest()) # 得到的密文没改变
    20 
    21 
    22 def hash_fun1(str1):
    23 m = hb.sha1(str1.encode("utf-8")) # sha1算法加密
    24 print(m.hexdigest())
    25 m1 = hb.sha224(str1.encode("utf-8")) # sha224算法加密
    26 print(m1.hexdigest())
    27 
    28 
    29 def hash_fun3():
    30 m = hb.md5()
    31 m1 = m.copy()
    32 m.update("a".encode("utf-8"))
    33 m.update("b".encode("utf-8"))
    34 print(m.hexdigest())
    35 m1.update("ab".encode("utf-8"))
    36 print(m1.hexdigest())
    37 
    38 
    39 if __name__ == '__main__':
    40 hash_fun("cai")
    41 print()
    42 hash_fun1("cai")
    43 print()
    44 hash_fun2("cai")
    45 print()
    46 hash_fun3()

    结果如下:

  • 相关阅读:
    智慧北京04_自定义下拉刷新
    智慧北京03_菜单详情页_ViewPagerIndicator框架_页签详情页_事件处理
    (转发)RJcente,安卓常用工具
    (转发 )将Eclipse代码导入到Android Studio的两种方式
    智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递
    智慧北京01_splash界面_新手引导界面_slidingMenu框架_.主界面结构
    自定义控件进阶02_侧滑删除,粘性控件
    一个抽奖H5页面的记录
    分享一个情侣头像小程序,欢迎体验、拍砖
    iPhone X H5页面适配
  • 原文地址:https://www.cnblogs.com/langqi250/p/9832312.html
Copyright © 2011-2022 走看看