python 加密库_Python加密库入门

本文介绍了Python中用于密码学的cryptography库,强调了遵循安全最佳实践的重要性。cryptography库提供了对称加密的Fernet类,易于生成和使用密钥。此外,还提到了PyNaCl库,它支持公钥密码学,包括加密、签名和验证等功能,用于更高级的安全场景。文章旨在帮助初学者理解Python中的加密基础和安全实践。
摘要由CSDN通过智能技术生成

python 加密库

密码学俱乐部的第一条规则是:永远不要自己发明密码系统。 密码学俱乐部的第二条规则是:永远不要自己实施密码系统:在密码系统的实施阶段以及设计中都会发现许多现实世界的漏洞。

一个有用的Python密码基元库称为cryptography 。 它既具有“安全”原语,又具有“危险品”层。 “ hazmat”层需要注意密码知识,并且很容易使用它来实现安全漏洞。 在这篇介绍性文章中,我们将不在“ hazmat”层中介绍任何内容!

加密是Fernet的实现。 Fernet是遵循最佳实践加密方法来加密缓冲区的标准。 它不适用于很大的文件-千兆字节及以上的任何文件-因为它要求您立即将要加密或解密的整个缓冲区加载到内存中。

Fernet支持对称秘密密钥加密:同一密钥用于加密和解密,因此必须保持安全。

生成密钥很容易:


   
   
>>> k = fernet. Fernet . generate_key ( )
>>> type ( k )
< class 'bytes' >

可以将这些字节写入具有适当权限的文件中,最好是在安全机器上。

获得密钥材料后,加密也很容易:


   
   
>>> 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世纪中叶,密码学中最有趣的进步之一是公钥密码学。 它允许在解密密钥保密的同时发布加密密钥。 例如,它可以用于存储服务器要使用的API密钥:服务器是唯一有权访问解密密钥的设备,但是任何人都可以使用公共加密密钥添加到存储中。

尽管密码学没有任何公共密钥密码学安全原语,但PyNaCl却有 。 PyNaCl包装并提供了一些不错的方法来使用Daniel J. Bernstein发明的NaCl加密系统。

NaCl总是同时加密签名解密验证签名 。 这是一种防止基于可延展性攻击的方法,在此方法中,攻击者会修改加密值。

加密是通过公钥完成的,而签名是通过私钥完成的:


   
   
>>> 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 ' \x e2 \x 1c0 \x a4'

解密反转了角色:解密需要专用密钥,而公共密钥则需要验证签名:


   
   
>>> 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构建,并包含完整的机密管理解决方案。

翻译自: https://opensource.com/article/19/4/cryptography-python

python 加密库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值