Python 常见加密操作的实现

hashlib加密

import hashlib
 
# 有很多种加密方式,md5,sha1等等
h = hashlib.md5()
# 提交加密的内容,bytes形式
h.update(b"satori")
# 二进制形式
print(h.digest())
'''
b'\x13\xd54\x0f:\xdf\x8e[\xe0\x83\xdd\xc6\xca\xd2G\xb8'
'''
# 十六进制形式
print(h.hexdigest())
'''
13d5340f3adf8e5be083ddc6cad247b8
'''
import hashlib
 
# 相对的,还有简便的操作
# 直接指定要加密的字符串
h1 = hashlib.md5(b"satori")
print(h1.hexdigest())
'''
13d5340f3adf8e5be083ddc6cad247b8
'''
 
h2 = hashlib.md5()
h2.update(b"satori")
print(h2.hexdigest())
'''
13d5340f3adf8e5be083ddc6cad247b8
'''
# 两者结果是一样的

hmac加密

import hmac
import hashlib
 
# key:密钥
# msg:内容
# digestmod:加密的模式,默认是md5
h1 = hmac.new(key=b"satori", msg=b"satori", digestmod=hashlib.md5)
print(h1.hexdigest())
'''
3cba321fbb4e02c5b7e9fb7ef82bb47b
'''
 
# 也可以通过update添加内容,是添加,不是覆盖
h2 = hmac.new(key=b"satori")
h2.update(b"satori")
print(h2.hexdigest())
'''
3cba321fbb4e02c5b7e9fb7ef82bb47b
'''

secrets

import secrets
 
# secrets貌似是python3.6里新增的模块,先来看看api
# secrets.choice(iterable),从可迭代对象里随机选择一个元素并返回
# secrets.randbelow(n),从[0,n)中随机选择一个数并返回
# secrets.randbits(k),返回带有k个随机位的整数
# secrets.token_bytes(nbytes=None),返回一个包含n个bytes的随机字符串
# secrets.token_hex(nbytes=None),返回一个包含n个bytes的16进制随机文本字符串,每个字节转换成两个16进制数字,一般用来生成随即密码
# secrets.token_urlsafe(nbytes=None),返回一个包含n个bytes的随即url字符串,可以用来生成一个临时的随机令牌
# secrets.compare_digest(a, b),比较两个字符串是否相等
 
print(secrets.choice("古明地盆"))  # 古
print(secrets.choice(["satori", "mashiro", "nagisa"]))  # nagisa
# 和random.choice()是类似的
 
print(secrets.randbelow(8))  # 6
# 和random.randint()类似,但是secrets.randbelow()只能默认从零开始,且不包含右端点
 
print(secrets.randbits(7))  # 96
 
print(secrets.token_bytes())  # b'\x87\x98\x1c\x80TO\xcf\x82\xc9\xf1\xd6\xf6f\xd7\xd7\xae\xea.\xfd0y\xd6\xaf\xfbe\xb4v\x8b@\xc8t\xe6'
print(secrets.token_bytes(nbytes=20))  # b'\xa5:(\xf2\xcb\xb2\xd8\xbce\xacn\x8c\x95\x05:\x07e#\xa7M'
 
print(secrets.token_hex())  # 0904e492deaab1270f11671d687f3bb2c7ead5283bfe55a3b51e560101c38828
print(secrets.token_hex(20))  # 851801ed1367bc946b1f28812a83a7e84d91908e
 
print(secrets.token_urlsafe())  # sGGhrL8VLECMYalQ5DHMDm0yugoVsr2M-SvN4z2Qk8k
print(secrets.token_urlsafe(nbytes=20))  # PIvP0VoRxvfignT1MH_p2vNog9U

base64

import base64
 
s = bytes("古明地盆", encoding="utf-8")
 
en_data1 = base64.b64encode(s)
print(en_data1)  # b'5Y+k5piO5Zyw55uG'
de_data1 = base64.b64decode(en_data1)
print(str(de_data1, encoding="utf-8"))  # 古明地盆
 
# 可以看出来,是为了考虑url安全的一种加密方式
# 与普通的b64encode不同的是,会将一些字符进行一个替换
en_data2 = base64.urlsafe_b64encode(s)
print(en_data2)  # b'5Y-k5piO5Zyw55uG'
de_data2 = base64.urlsafe_b64decode(en_data2)
print(str(de_data2, encoding="utf-8"))  # 古明地盆

cryptography

from cryptography.fernet import Fernet
 
# 生成秘钥cipher_key
cipher_key = Fernet.generate_key()
 
# 传入秘钥实例化一个类
cipher = Fernet(cipher_key)
 
text = '古明地觉'.encode("utf-8")
 
#进行加密
encrypted_text = cipher.encrypt(text)
print(type(encrypted_text))  # <class 'bytes'>
 
#进行解密
decrypted_text = cipher.decrypt(encrypted_text)
print(decrypted_text.decode("utf-8"))  # 古明地觉

以上就是Python 常见加密操作的实现的详细内容,更多关于python 加密操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python创建自己的加密货币的示例

    随着当前加密货币的兴起,区块链在技术界引起了轰动. 这项技术之所以吸引了如此多的关注,主要是因为它具有保证安全,强制分权和加快多个行业(尤其是金融行业)流程的能力. 本质上,区块链是一个公共数据库,它不可逆地记录和认证数字资产的拥有和传输.像比特币和以太坊这样的数字货币就是基于这个概念. 区块链是一项令人兴奋的技术,可用于转换应用程序的功能. 最近,我们看到政府,组织和个人使用区块链技术来创建自己的加密货币.值得注意的是,当Facebook提出自己的加密货币Libra时,这一公告激起了全世界的许

  • Python实现AES加密,解密的两种方法

    第一种 import base64 from Crypto.Cipher import AES # 密钥(key), 密斯偏移量(iv) CBC模式加密 def AES_Encrypt(key, data): vi = '0102030405060708' pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16) data = pad(data) # 字符串补位 cipher = AES.new(key.encode('utf8

  • Python爬虫如何破解JS加密的Cookie

    通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的

  • python通过cython加密代码

    #coding=utf-8 import getopt import os, sys import zipfile from Crypto.Cipher import AES import random, struct #加密python3的代码 def transfer3(dir_pref):     os.system('cython -2 %s.py;'             'gcc -c -fPIC -I/usr/include/python3.5/ %s.c -o %s.o'   

  • Python常用base64 md5 aes des crc32加密解密方法汇总

    1.base64 Python内置的base64模块可以实现base64.base32.base16.base85.urlsafe_base64的编码解码,python 3.x通常输入输出都是二进制形式,2.x可以是字符串形式. base64模块的base64编码.解码调用了binascii模块,binascii模块中的b2a_base64()函数用于base64编码,binascii模块中的a2b_base64()函数用于base64解码. >>>import base64 >&

  • python 实现aes256加密

    基础知识 # 在Linux操作系统下,Python3的默认环境编码变为了utf-8编码,所以在编写代码的时候,字符串大部分都是以utf-8处理 UTF-8: 1byte = 8bit 1个英文字符 = 1byte 1个中文字符 = 3byte 128bit = 16byte = 16个英文字符 192bit = 24byte = 24个英文字符 256bit = 32byte = 32个英文字符 AES256概念 AES是一种对称加密算法,对称指加密和解密使用同一个密钥: 256指密钥的长度是2

  • python rsa-oaep加密的示例代码

    代码: from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP import base64 rsa_key_pair = RSA.generate(1024) pubkey = rsa_key_pair.publickey().export_key() privkey = rsa_key_pair.export_key() print(pubkey.decode()) print(privkey.decode()

  • Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)

    前言: 猫眼票房页面的字体加密是动态的,每次或者每天加载页面的字体文件都会有所变化,本篇内容针对这种加密方式进行分析 字体加密原理:简单来说就是程序员在设计网站的时候使用了自己设计的字体代码对关键字进行编码,在浏览器加载的时会根据这个字体文件对这些字体进行编码,从而显示出正确的字体. 已知的使用了字体加密的一些网站: 58同城,起点,猫眼,大众点评,启信宝,天眼查,实习僧,汽车之家 本篇内容不过多解释字体文件的映射关系,不了解的请自行查找其他资料. 如若还未入门爬虫,请往这走 简单粗暴入门法--

  • python爬虫破解字体加密案例详解

    本次案例以爬取起小点小说为例 案例目的: 通过爬取起小点小说月票榜的名称和月票数,介绍如何破解字体加密的反爬,将加密的数据转化成明文数据. 程序功能: 输入要爬取的页数,得到每一页对应的小说名称和月票数. 案例分析: 找到目标的url: (右键检查)找到小说名称所在的位置: 通过名称所在的节点位置,找到小说名称的xpath语法: (右键检查)找到月票数所在的位置: 由上图发现,检查月票数据的文本,得到一串加密数据. 我们通过xpathhelper进行调试发现,无法找到加密数据的语法.因此,需要通

  • Python 常见加密操作的实现

    hashlib加密 import hashlib   # 有很多种加密方式,md5,sha1等等 h = hashlib.md5() # 提交加密的内容,bytes形式 h.update(b"satori") # 二进制形式 print(h.digest()) ''' b'\x13\xd54\x0f:\xdf\x8e[\xe0\x83\xdd\xc6\xca\xd2G\xb8' ''' # 十六进制形式 print(h.hexdigest()) ''' 13d5340f3adf8e5b

  • Python常见文件操作的函数示例代码

    复制代码 代码如下: # -*-coding:utf8 -*- ''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() 去掉文件名, 返回目录路径 join() 将分离的各部分组合成一个路径名 split() 返回 (dirname(), basename()) 元组 splitdrive() 返回 (drivename, pathname) 元组 splitext() 返回 (filename,

  • Python常见字符串操作函数小结【split()、join()、strip()】

    本文实例讲述了Python常见字符串操作函数.分享给大家供大家参考,具体如下: str.split(' ') 1.按某一个字符分割,如'.' >>> s = ('www.google.com') >>> print(s) www.google.com >>> s.split('.') ['www', 'google', 'com'] 2.按某一个字符分割,且分割n次.如按'.'分割1次:参数maxsplit位切割的次数 >>> s =

  • python RC4加密操作示例【测试可用】

    本文实例讲述了python RC4加密操作.分享给大家供大家参考,具体如下: # -*- conding:utf-8 -*- from Crypto.Cipher import ARC4 from binascii import b2a_hex, a2b_hex def myRC4(data,key): rc41 = ARC4.new(key) encrypted = rc41.encrypt(data) return encrypted.encode('hex') def rc4_decrpt

  • Python常见排序操作示例【字典、列表、指定元素等】

    本文实例讲述了Python常见排序操作.分享给大家供大家参考,具体如下: 字典排序 按value排序 d1 = {"name":"python","bank":"icbc","country":china} # reverse是否倒序,x[1]代表value,x[0]为key d1 = sorted(d1.items(),lambda x: x[1],reverse=True) 按key排序 d1 = {&

  • Python常见文件操作的示例详解

    目录 从文件中读取数据 为什么要提供文件路径 逐行读取 创建一个包含文件各行内容的列表 使用文件中的内容 包含千位以上的大型文件 圆周率中包含你的生日吗 写入文件 附加到文件 从文件中读取数据 1:读取整个文件 首先创建一个文件,它包含一些文本信息,注意:如果该文件为.py文件,则再进行操作的时候可以不写路径,如果不是.py文件,则必须标明路径. 现在我们创建一个python文件,名为text.py,给他写入如下文本信息: 下面的程序打开并读取这个文件,再将其内容显示到屏幕上: with ope

  • Python常见MongoDB数据库操作实例总结

    本文实例讲述了Python常见MongoDB数据库操作.分享给大家供大家参考,具体如下: MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可

  • python针对Oracle常见查询操作实例分析

    本文实例讲述了python针对Oracle常见查询操作.分享给大家供大家参考,具体如下: 1.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: 执行顺序:先执行子查询得到结果以后返回给主查询 组成部分: 1).主查询部分 2).子查询部分 [注意事项]: 子查询一定需要被定义/包裹在小括号内部,可以认为是显示的提升了代码执行的优先级 需求1: 查询薪资比Abel的高的有谁? 分析: ①.先查询出Abel的薪资是多少? ②.将过滤条件定义为

  • Python实现MySQL操作的方法小结【安装,连接,增删改查等】

    本文实例讲述了Python实现MySQL操作的方法.分享给大家供大家参考,具体如下: 1. 安装MySQLdb.从网站下载Mysql for python 的package 注意有32位和64位之分. 2. 安装完成之后从Python IDLE 导入MySQLdb >>>import MySQLdb 3. 新建一个数据库连接: >>>conn =MySQLdb.connect(host = '127.0.0.1',user= 'root',passwd='123456'

  • python连接、操作mongodb数据库的方法实例详解

    本文实例讲述了python连接.操作mongodb数据库的方法.分享给大家供大家参考,具体如下: 数据库连接 from pymongo import MongoClient import pandas as pd #建立MongoDB数据库连接 client = MongoClient('162.23.167.36',27101)#或MongoClient("mongodb://162.23.167.36:27101/") #连接所需数据库,testDatabase为数据库名: db=

随机推荐