w88优德_优德88官网_优德88电子游戏

舟山天气预报,Python 的加密库入门-w88优德

admin2个月前252浏览量

加密你的数据并使其免受进犯者的进犯。

-- Moshe Zadka(作者)

暗码学沙龙的榜首条规则是:永久不要自己创造暗码体系。暗码学沙龙的第二条规则是:永久不要自己完结暗码体系:在实际国际中,在完结以及规划暗码体系阶段都找到过许多缝隙。

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 之上,包括完好的密钥办理计划。


via: https://opensource.com/article/19/4/cryptography-python

作者: Moshe Zadka 选题: lujun9972 译者: geekpi 校正: wxy

本文由 LCTT 原创编译, Linux我国 荣誉推出

点击“了解更多”可拜访文内链接

最新评论