【python3】通过hashlib 和base64 对字符串进行加密

枫铃3年前 (2021-07-11)Python249

这篇文章是讲述 如何通过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'!#/)zW\xa5\xa7C\x89J\x0eJ\x80\x1f\xc3'

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类型

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。