python加密库用哪个好_Python的加密库入门!
image
加密你的数据并使其免受攻击者的攻击。
密码学俱乐部的第一条规则是:永远不要自己 发明 密码系统。密码学俱乐部的第二条规则是:永远不要自己 实现 密码系统:在现实世界中,在 实现 以及设计密码系统阶段都找到过许多漏洞。
Python学习交流群:1004391443,这里是python学习者聚集地,有大牛答疑,有资源共享!小编也准备了一份python学习资料,有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。
Python 中的一个有用的基本加密库就叫做 cryptography 。它既是一个“安全”方面的基础库,也是一个“危险”层。“危险”层需要更加小心和相关的知识,并且使用它很容易出现安全漏洞。在这篇介绍性文章中,我们不会涵盖“危险”层中的任何内容!
cryptography 库中最有用的高级安全功能是一种 Fernet 实现。Fernet 是一种遵循最佳实践的加密缓冲区的标准。它不适用于非常大的文件,如千兆字节以上的文件,因为它要求你一次加载要加密或解密的内容到内存缓冲区中。
Fernet 支持 对称
symmetric
(即 密钥
secret key
)加密方式*:加密和解密使用相同的密钥,因此必须保持安全。
生成密钥很简单:
>>> k = fernet.Fernet.generate_key()
type(k)
这些字节可以写入有适当权限的文件,最好是在安全的机器上。
有了密钥后,加密也很容易:
>>> frn = fernet.Fernet(k)
encrypted = frn.encrypt(b”x marks the spot”)
encrypted[:10]
b’gAAAAABb1′
如果在你的机器上加密,你会看到略微不同的值。不仅因为(我希望)你生成了和我不同的密钥,而且因为 Fernet 将要加密的值与一些随机生成的缓冲区连接起来。这是我之前提到的“最佳实践”之一:它将阻止对手分辨哪些加密值是相同的,这有时是攻击的重要部分。
解密同样简单:
>>> frn = fernet.Fernet(k)
frn.decrypt(encrypted)
b’x marks the spot’
请注意,这仅加密和解密 字节串 。为了加密和解密 文本串 ,通常需要对它们使用 UTF-8 进行编码和解码。
20 世纪中期密码学最有趣的进展之一是 公钥
public key
加密。它可以在发布加密密钥的同时而让 解密密钥 保持保密。例如,它可用于保存服务器使用的 API 密钥:服务器是唯一可以访问解密密钥的一方,但是任何人都可以保存公共加密密钥。
虽然 cryptography 没有任何支持公钥加密的 安全 功能,但 PyNaCl 库有。PyNaCl 封装并提供了一些很好的方法来使用 Daniel J. Bernstein 发明的 NaCl 加密系统。
NaCl 始终同时 加密
encrypt
和 签名
sign
或者同时 解密
decrypt
和 验证签名
verify signature
。这是一种防止 基于可伸缩性
malleability-based
的攻击的方法,其中攻击者会修改加密值。
加密是使用公钥完成的,而签名是使用密钥完成的:
>>> from nacl.public import PrivateKey, PublicKey, Box
source = PrivateKey.generate()
with open(“target.pubkey”, “rb”) as fpin:
… target_public_key = PublicKey(fpin.read())
enc_box = Box(source, target_public_key)
result = enc_box.encrypt(b”x marks the spot”)
result[:4]
b’\xe2\x1c0\xa4′
解密颠倒了角色:它需要私钥进行解密,需要公钥验证签名:
>>> from nacl.public import PrivateKey, PublicKey, Box
with open(“source.pubkey”, “rb”) as fpin:
… source_public_key = PublicKey(fpin.read())
with open(“target.private_key”, “rb”) as fpin:
… target = PrivateKey(fpin.read())
dec_box = Box(target, source_public_key)
dec_box.decrypt(result)
b’x marks the spot’
最后, PocketProtector 库构建在 PyNaCl 之上,包含完整的密钥管理方案。
python加密库用哪个好_Python的加密库入门!相关推荐
- python第三方库使用文档_python 的第三方库的使用
我们写python代码的时候往往需要用第三方的库文件,Python强大的原因就是有大量的功能各异的第三方库.因此学会如何使用第三方库很有必要. 除了python官方自带的模块外,大部分第三方库是需要先 ...
- python标准库os的方法_Python中标准库OS的常用方法总结大全
前言 我们经常会与文件和目录打交道,对于这些操作python提供了一个os模块,里面包含了很多操作文件和目录的函数.在写一些系统脚本或者自动化运维脚本的时候经常会用到这个 os 库,所以这里做个整理, ...
- python接口测试之requests详解_Python接口测试-requests库
一.requests库 Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量 ...
- python中time库是什么意思_python中time库的time.time()函数的作用是什么
python中time库的time.time()函数的作用是什么? 作用:Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数). time()方法语法:time. ...
- python xlrd读取文件报错_python中xlrd库如何实现文件读取?
俗话说得好,技多不压身,虽然我们已经掌握了多种可以实现读取文件的方式,但是丝毫不影响我们要学会精益求精,他说学习文件读取的奥秘,况且,数据分析是十分重要的,一切的代码运行,总归都是要服务于数据,好啦, ...
- python处理一亿条数据_Python基础数据处理库
Numpy 简介 import numpy as np Numpy是应用Python进行科学计算的基础库.它的功能包括多维数组.基本线性代数.基本统计计算.随机模拟等.Numpy的核心功能是ndarr ...
- 用python和sympy库解决方程组问题_Python语言 SymPy库数学方程问题——线性方程组篇...
本文主要向大家介绍了Python语言 SymPy库数学方程问题--线性方程组篇,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 这里我的本机的操作系统是 Ubuntu 14.04 ...
- python的random模块怎么写_Python常用标准库之random模块
一.概述 在我们日常写代码的过程中,经常需要产生随机数,Python为我们提供了random库,该模块实现了各种分布的伪随机数生成器,本文主要讲解其常用方法,更多详细内容请移步:Random官方文档. ...
- python中的turtle如何运行_python中turtle库的简单使用教程
python的turtle库的简单使用 Python的turtle库是一个直观有趣的图形绘制函数库,是python的标准库之一. 一.绘图坐标体系 turtle库绘制图形的基本框架:通过一个小海龟在坐 ...
最新文章
- Android 内容观察者 ContentObserver 类
- html底部沉底显示,Footer部分永远沉底。
- 题目1465:最简真分数
- C++:读写二进制文件到double数组
- 7.7-9 chage、chpasswd、su
- Java是先难后易吗_在解决问题的时候,是先难后易还是先易后难?
- 谷歌浏览器网页翻译失效,无法翻译成中文,且谷歌翻译api报404问题
- datavideo切换台说明书_datavideo洋铭 SE-650 HD4通道切换台,高清导播切换台
- python 导入的nan怎么解决_如何处理python里的Nan和None
- 基于linux的软件测试,基于linux的Web服务器性能测试
- 文章本天成 妙手偶得之 两句三年得 一吟双泪流
- WinSock网络编程基础(1)
- 为什么ASO很重要?
- 在比特大陆SE5边缘计算盒上运行PaddleOCR轻量级预测模型
- 福建厦门计算机春季高考考哪些学校,福建省2020年春季高考总分多少?春季高考本科院校有哪些?...
- zxr10交换机配置手册vlan_中兴ZXR10配置说明
- php考研难么,版主2006年考研经验谈:考研并不难
- 56岁潘石屹下定决心学Python,60多岁程序语言之父们还在敲代码,你还敢懈怠吗?
- Conway’s Game of Life中看C++SSE2并行化计算
- C++线段树运用进阶:【高级数据结构】自动售票系统