数据的加解密_cryptography
混合加密系统(最优组合)
步骤:
1. 使用 AES 加密代码文件
2. 使用 RSA 公钥加密 AES 密钥
3. 附加 HMAC-SHA3 验证密文完整性
HMAC是通过哈希函数和共享密钥确保数据一致性和真实性的加密技术。
与基于数字签名和非对称算法的加密认证方法不同
通信相关方来说,确保数据的一致性非常重要。HTTPS、FTPS、SFTP等传输协议会使用HMAC
功能
丰富的加密、解密、哈希、数字签名等功能
Python标准库中的 hashlib 模块提供了多种工业标准的哈希算法,如MD5、SHA系列等。这些算法可用于数据完整性校验、消息摘要生成以及密码散列
MD5(Message-Digest Algorithm 5)
SHA(Secure Hash Algorithm)家族是一组更为安全的哈希函数,
加盐(salt)加盐是在原始密码上附加一个随机字符串后再进行哈希运算,使得即使两个用户使用了相同的密码,经过加盐哈希后的结果也会不同
PKI(Public Key Infrastructure)即公钥基础设施
Python加解密
PyCryptodome 和cryptography 都是Python 的加密库,但它们有不同的定位和侧重点。
PyCryptodome 主要用于提供低级密码学原语,
cryptography 库则更侧重于提供高级的、易于使用的接口来执行常见的加密操作
cryptography depends on the OpenSSL C library for all cryptographic operation
– crypto 是与我们需求风马牛不相及的GPG加解密库,该库已于2016年停更,且python-gnupg库才是最主流的GPG加解密库。
– PyCrypto 是Python『前』主流加解密库,但已停更。
– PyCryptodome 是当前最主流的Python加解密库,如果遇到代码中有import Crypto等字样,就需要安装这个库
标准
公钥加密标准(Public Key Cryptography Standards, PKCS)
PrivateKeyTypes, PublicKeyTypes
pem格式的私钥
`backend`:可选参数,默认值为 `None`,这个参数用于指定加密库的后端实现。如果不提供后端参数,默认情况下将使用适当的后端
通常可选择对称加密或非对称加密方案,具体实现方式取决于加密需求和密钥管理策略。
default_backend cryptographic.hazmat.backends.openssl.backend
backends.openssl (aead ciphers cmac dh dds ec ed448.rsa
OAEP PKCS1v15 PSS MGF1
from cryptography.hazmat.primitives.asymmetric import padding
签名(sign)
对称性加密
高级加密标准(Advanced Encryption Standard: AES
ECB 模式。
CBC 模式(密码分组链接:Cipher-block chaining) 因为 CBC 模式要求提供一个 IV 加密方式 IV(初始化向量)
CFB 模式(密文反馈:Cipher feedback)
AES-256-CBC 是一种对称加密算法,使用 256位密钥 和 CBC(Cipher Block Chaining)模式
密钥长度(128、192、256位)、模式(如CBC、ECB)和填充方式
填充方式: padding.PKCS7
数据填充函数
数据去填充函数
AES加密的数据块大小固定为128位(即16字节)。如果待加密数据的长度不是16字节的倍数,就需要进行填充 PKCS#7标准
例如AES的ECB,CBC,PCBC模式加密时,如果明文分块没有对齐,则需要填充,填充有很多种方式
对称加密常用的是PKCS#5和PKCS#7 Padding;
而非对称的填充算法常用的是 PKCS#1_v1.5以及OAEP(PKCS#1_v2)
非对称加密
原始的数据-加密的文件
RSA算法也是一个块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作。
但跟AES等不同的是,block length是跟key length有关的
OAEP填充方案(Optimal Asymmetric Encryption Padding)
RSA有如下三种填充方式:
填充方式 输入 输出
RSA_PKCS1_PADDING 必须比RSA秘钥短至少11个字节,也就是RSA_size(rsa) – 11 和秘钥一样长
RSA_PKCS1_OAEP_PADDING RSA_size(rsa) – 41 和秘钥一样长 最优非对称填充(OAEP)
RSA_NO_PADDING 可以和RSA秘钥一样长,如果输入的明文过长,必须切割,然后填充 和秘钥一样长
RSA_PKCS1_OAEP_PADDING 引入了类似HMAC消息验证码的算法(可见4.2小节),原理就是填充了一些与原文相关的哈希值,解密后可以进行验证
RSA_PKCS1_OAEP_PADDING (or simply OAEP)
mgf=padding.MGF1(algorithm=hashes.SHA256()): 这是设置 OAEP 中的 MGF (Mask Generation Function),使用SHA-256哈希算法生成掩码。
algorithm=hashes.SHA256(): 这是设置 OAEP 中的哈希算法,使用SHA-256。
label=None: 这是设置 OAEP 的标签,通常设为 None。
openSSL中OAEP填充方式默认哈希算法是 SHA1 openssl库没有直接提供接口能够选择sha256方式的填充
OpenSSL中的RSA_PKCS1_OAEP_PADDING。此模式需要设置两个摘要(md和mgf1_md)
mgf 掩码生成算法,目前仅支持MGF1。
md 摘要算法。
SHA-256是一种基于Merkle-Damgard结构的散列函数,其输入为任意长度的消息,输出为256位的散列值
SHA-1 是SHA-2家族中的一员,是SHA-256的前身。它的输入和输出长度分别为512位和160位 SHA1
ECC(椭圆曲线加密)及其他非对称加密
DH(Diffie-Hellman)密钥交换协议
注意事项
1.加密的文件是作为解密的统一,注意文件完整性检查,以及先简单的文件按,再复杂的文件的步骤进行处理
二进制文件大小端--加密的方式(对称加密+模式)+填充的方式
2.注意密钥的安全性
其他
base64.b64encode函数是用来将二进制数据编码为Base64格式的字符串。
Base64是一种用64个字符表示任意二进制数据的方法,常用于在不适合使用二进制数据的场合(如纯文本传输协议)中传输二进制数据
PKCS7Padding 与 PKCS5Padding 与ZeroPadding填充规则
哈希函数与消息摘要
哈希函数则更像是指纹提取机,它将任意长度的数据压缩成固定长度的唯一标识,称为消息摘要或哈希值
ssl sudo apt install openssh-server sudo systemctl start sshd sudo service ssh start
SSL(Secure Sockets Layer)是一种用于保护网络通信安全的协议,它通过使用加密和认证的方式
sudo systemctl status ssh
sudo vi /etc/ssh/sshd_config
ssl genkey
ssl selfsign
ssh-keygen -t rsa -C"your_email@youremail.com"
ssh-keygen -t rsa 命令生成了一个密钥(私钥)和一个公钥
backend
unsupported ssl backend 'openssl'.
supported ssl backends: gnutls
gnutls和openssl都是用于实现安全通信的握手协议库,提供了加密、解密、身份验证和安全通信的功能。
gnutls:gnutls是一个开源的TLS/SSL协议库,用于实现安全的通信。
它提供了加密、解密、身份验证和安全通信的功能。gnutls支持多种加密算法和密钥交换协议,包括RSA、DSA、Diffie-Hellman、ECDH等。
gnutls-cli 是 gnutls 提供的命令行工具,用于测试和调试 SSL/TLS 服务器
openssl:openssl是一个开源的加密工具包,提供了SSL/TLS协议的实现。
它支持多种加密算法和密钥交换协议,包括RSA、DSA、Diffie-Hellman、ECDH等。openssl提供了一系列命令行工具和API
生成证书请求:openssl req
二一添作五——对半平分。
三下五除二
RSA
标准的密钥长度是1024位、2048位或4096位
AES加密算法 支持三种密钥长度:
AES-128 :128位(16字节)
AES-192 :192位(24字节)
AES-256 :256位(32字节)
明文长度 = 实际明文长度+填充值
参考
https://cryptography.io/en/latest/
https://docs.python.org/3/library/struct.html
https://docs.openssl.org/master/man3/
【Python进阶】Python中的加密与解密:数据安全与加密技术 https://zhuanlan.zhihu.com/p/690976784

浙公网安备 33010602011771号