Python如何玩转加密?
暗码学俱乐部的第一条法则是:永久不要本身发现暗码体系。暗码学俱乐部的第二条法则是:永久不要本身实现暗码体系:在实际天下中,在实现以及计划暗码体系阶段都找到过很多裂痕。 Python 中的一个有效的根基加密库就叫做 cryptography 。它既是一个“安详”方面的基本库,也是一个“伤害”层。“伤害”层必要越发警惕和相干的常识,而且行使它很轻易呈现安详裂痕。在这篇先容性文章中,我们不会涵盖“伤害”层中的任何内容! cryptography 库中最有效的高级安详成果是一种 Fernet 实现。Fernet 是一种遵循最佳实践的加密缓冲区的尺度。它不合用于很是大的文件,如千兆字节以上的文件,由于它要求你一次加载要加密或解密的内容到内存缓冲区中。 Fernet 支持 对称(symmetric)(即 密钥(secret key))加密方法*:加密息争密行使沟通的密钥,因此必需保持安详。 天生密钥很简朴:
这些字节可以写入有恰当权限的文件,最好是在安详的呆板上。 有了密钥后,加密也很轻易:
假如在你的呆板上加密,你会看到略微差异的值。不只由于(我但愿)你天生了和我差异的密钥,并且由于 Fernet 将要加密的值与一些随机天生的缓冲区毗连起来。这是我之条件到的“最佳实践”之一:它将阻止敌手判别哪些加密值是沟通的,这偶然是进攻的重要部门。 解密同样简朴:
请留意,这仅加密息争密字节串。为了加密息争密文本串,凡是必要对它们行使 UTF-8 举办编码息争码。 20 世纪中期暗码学最风趣的盼望之一是 公钥(public key)加密。它可以在宣布加密密钥的同时而让解密密钥保持保密。譬喻,它可用于生涯处事器行使的 API 密钥:处事器是独一可以会看法密密钥的一方,可是任何人都可以生涯民众加密密钥。 固然 cryptography 没有任何支持公钥加密的安详成果,但 PyNaCl 库有。PyNaCl 封装并提供了一些很好的要领来行使 Daniel J. Bernstein 发现的 NaCl 加密体系。 NaCl 始终同时 加密(encrypt)和 署名(sign)可能同时 解密(decrypt)和 验证署名(verify signature)。这是一种防备 基于可伸缩性(malleability-based)的进攻的要领,个中进攻者会修改加密值。 加密是行使公钥完成的,而署名是行使密钥完成的:
解密颠倒了脚色:它必要私钥举办解密,必要公钥验证署名:
最后, PocketProtector 库构建在 PyNaCl 之上,包括完备的密钥打点方案。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |