zoukankan      html  css  js  c++  java
  • 【python3】通过hashlib 和base64 对字符串进行加密

    这篇文章是讲述 如何通过hashlib 和base64 对字符串进行加密的

    hashlib

    1. 强大的hashlib,提供了用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

    2. hmac模块实现了hmac算法,需要一个key来进行加密,提供更为强大的加密,不过需要提供key,也就是通常说的盐

    3. 使用hashlib.algorithms_available,可以查看hashlib提供的加密算法

    4. 加密的算法的一般使用,但时候存在缺陷,即:通过撞库可以反解

    下面介绍hashlib常用的5种加密方式

    md5

    import hashlib
    
    hash=hashlib.md5()#创建md5加密实例
    hash.update(bytes('admin',encoding='utf-8'))
    print('返回产生的十六进制的bytes: ', hash.hexdigest())
    print(hash.digest())
    
    返回产生的十六进制的bytes:  21232f297a57a5a743894a0e4a801fc3
    b'!#/)zWxa5xa7Cx89Jx0eJx80x1fxc3'
    

    sha1

    hash=hashlib.sha1()
    hash.update(bytes('admin',encoding='utf-8'))
    print(hash.hexdigest())
    
    d033e22ae348aeb5660fc2140aec35850c4da997
    

    sha256

    hash = hashlib.sha256()
    hash.update(bytes('admin',encoding='utf-8'))
    print(hash.hexdigest())
    
    8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
    

    sha384

    hash=hashlib.sha384()
    hash.update(bytes('admin',encoding='utf-8'))
    print(hash.hexdigest())
    
    9ca694a90285c034432c9550421b7b9dbd5c0f4b6673f05f6dbce58052ba20e4248041956ee8c9a2ec9f10290cdc0782
    

    sha512

    hash=hashlib.sha512()
    hash.update(bytes('admin',encoding='utf-8'))
    print(hash.hexdigest())
    
    c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec
    

    bash64

    在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码 或者是 对拿到的响应报文进行解码

    Base64编码是一种“防君子不防小人”的编码方式。广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符。
    优点:速度快,ascii字符,肉眼不可理解
    缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合

    注意base64只能对bytes对象进行加密,所以如果要将1个字符串使用base64进行加密,首先应该将这个字符串转换为bytes类型
    否则会产生TypeError错误:
    TypeError: a bytes-like object is required, not 'str'

    print(base64.b64encode('kdkd'))
    
    ---------------------------------------------------------------------------
    
    TypeError                                 Traceback (most recent call last)
    
    <ipython-input-40-7c51aa08d607> in <module>
    ----> 1 print(base64.b64encode('kdkd'))
    
    
    ~/.virtualenvs/pd_test/lib/python3.6/base64.py in b64encode(s, altchars)
         56     application to e.g. generate url or filesystem safe Base64 strings.
         57     """
    ---> 58     encoded = binascii.b2a_base64(s, newline=False)
         59     if altchars is not None:
         60         assert len(altchars) == 2, repr(altchars)
    
    
    TypeError: a bytes-like object is required, not 'str'
    

    base64编码encode

    import base64
    

    定义一个字符串str,并将它转换为bytes类型

    str='admin'
    str_bytes=bytes(str,'utf-8')
    print(str_bytes)
    
    b'admin'
    

    使用b64encode对str_bytes进行加密

    st_base64_encode=base64.b64encode(str_bytes)
    print(st_base64_encode)
    
    b'YWRtaW4='
    

    使用b64decode对st_base64_encode进行解密

    str_base64_decode=base64.b64decode(st_base64_encode)
    print(str_base64_decode)
    
    b'admin'
    

    将b'admin'转换为字符串类型

    str=str_base64_decode.decode()
    print(str)
    
    admin
  • 相关阅读:
    Prime Land(poj 1365)
    备用交换机(cogs 8)
    救命(洛谷 U4525)
    消息传递(cogs 1001)
    SQLite 使用主键,ROWID 及自增列
    SqlHelper 类
    一个继承的 DataGridView
    给JAVA的eclipse IDE 在线安装 SVN插件 / 给 eclipse 添加打开所在的文件夹功能
    实时更新DataGridView 合计值
    导出为文本格式
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/13030874.html
Copyright © 2011-2022 走看看