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运维圈

相关页面:加密软件,文件加密,文档加密,图纸加密软件,防泄密软件,CAD加密软件,文件外发加密

python如何加密_Python如何玩转数据加密?相关推荐

  1. python md5加密_Python MD5加密实例详解

    详解Python MD5加密 Python 3下MD5加密 # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待 ...

  2. python 文件加密_python实现文件快照加密保护的方法

    本文实例讲述了python实现文件快照加密保护的方法.分享给大家供大家参考.具体如下: 这段代码可以对指定的目录进行扫描,包含子目录,对指定扩展名的文件进行SHA-1加密后存储在cvs文件,以防止文件 ...

  3. python程序加密_Python简单的加密程序:如何循环Z回到A

    我会推荐使用模数运算符来做你想要的.在python中是%字符.在模数学中. X%Y告诉我们X/Y的剩余部分是什么.例如. 27%26是1.使用这个你可以得到你想要的包装.这里是一个代码示例位,如果我们 ...

  4. python不能加密_Python之加密模块

    hashlib模块 加密方式以md5方式加密举例 是标准模块,直接导入即可 还有其他的加密方式,比如:.sha1()..sha224()..sha256()等,加密后的字符串长度更长,安全性更高 一. ...

  5. python论文摘要_python新玩法:用python进行文章摘要拿取,只需要一行代码

    前言 今天为大家介绍一个python算法TextRank,实现从长篇中快速抽取精准摘要. TextRank是一种基于图形的文本处理排序算法.PageRank通常用作其底层的图排序模型.当然,其他的图排 ...

  6. python url加密_python的加密操作

    hashlib加密 import hashlib # 有很多种加密方式,md5,sha1等等 h = hashlib.md5() # 提交加密的内容,bytes形式 h.update(b"s ...

  7. python 3des加密_python – 使用3DES和CBC破坏我的加密数据的前8个字节

    我在应用程序中使用PyCrypto来加密数据,但由于某种原因,无论我做什么,前8个字节(对应于第一个块)都会损坏. >>> from Crypto.Cipher import DES ...

  8. python post请求rsa加密_Python的加密方式:RSA加密

    Python的加密方式:RSA加密 RSA加密是一种非对称加密,通常使用公钥加密,私钥解密,私钥签名,公钥验签. 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)S ...

  9. python基础教程zip密码_python基础教程Python实现加密的RAR文件解压的方法(密码已知)...

    博主之前在网上找了很多资料,发现rarfile库不能直接调用,需要安装unrar模块,下面将详细介绍整个实现流程. 第一步:安装unrar模块,直接pip install unrar可能会找不到库,需 ...

最新文章

  1. Ubuntu添加硬盘实验
  2. aws java mysql_AWS Serverless部署java api(RDS for MySQL篇)
  3. 读书笔记:季羡林关于如何做研究学问的心得
  4. C#编译器优化那点事
  5. mysql 关联更新_跳出初学MySQL知识的原理整理(一)
  6. Java并发编程之并发容器ConcurrentHashMap(JDK1.7)解析
  7. java request 处理过程_小猿圈Java开发之从代码看spring mvc请求处理过程
  8. mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...
  9. POJ 3253 Fence Repair 贪心
  10. 【王道计组笔记】Cache高速缓存基本工作原理
  11. AcWing 897. 最长公共子序列(LCS朴素版)
  12. h5点击按钮之后按钮消失_小程序webview跳转页面后没有返回按钮完美解决方案
  13. 递归算法的基本理解以及基本算法,多行注释详解,适合编程小白,刚接触递归的编程新手
  14. 初次尝试使用VisualSFM记录
  15. MIMO检测之ZF,MMSE,ML算法matlab代码
  16. Ring of Elysium 游戏汉化
  17. 硬盘SMART检测参数attributes详解
  18. Tony Mobily谈强化Apache
  19. 自学python能干什么知乎_自学python能干什么
  20. 难倒刘强东的奥数题,京东智能供应链解开了

热门文章

  1. python批量将文件夹下所有图片中一种颜色改变为随机颜色
  2. Navicate在同步oracle数据,不同数据库之间同步
  3. Linux系统安全之pam后门安装使用详解
  4. javascript--Date
  5. Javascript项目
  6. 了解Python编程——Python学习(三)
  7. [转载] python中 堆heapq以及 队列queue的使用
  8. zabbix--基础概念及原理
  9. C# 基于 adb 控制安卓
  10. C Looooops POJ - 2115 (exgcd)