python《加密之对称加密之AES》应用场景、方法介绍及应用示例

  • 待编写
    python《加密之对称加密之AES》应用场景、方法介绍及应用示例
    python《加密之对称加密之DES》应用场景、方法介绍及应用示例
    python《加密之对称加密之RC4》应用场景、方法介绍及应用示例
    python《加密之对称加密之3DES》应用场景、方法介绍及应用示例
    python《加密之对称加密之抉择》AES、DES、3DES、RC4区别、联系、如何抉择
    
    python《加密之非对称加密之RSA》应用场景、方法介绍及应用示例(https用此)
    python《加密之非对称加密之DH》应用场景、方法介绍及应用示例
    python《加密之非对称加密之ACC》应用场景、方法介绍及应用示例
    python《加密之对称非对称抉择》非对称加密、对称加密如何抉择
    
    非对成加密:由两份密钥组成的 公钥和私钥
    他们都是一连串的字符,私钥由个人保存,而公钥对外公开
    
    由私钥加密的文件,只有用对应的公钥才能解密
    由公钥加密的文件,只有用对应的私钥才能解密
    
    甚至公钥和私钥自己加密的文件,自己都不能解密
    
    常用的非对称加密算法:rsa和ecdsa(btc)
    
一、AES应用场景及安装

能否解密分类:可解密、不可解(如hash) 无法反算的加密赞此出不做介绍
解密方式分类: 对称加密、非对称加密

pip install pycrypto
二、AES方法介绍
  • key字节串,对称密码中使用的密钥, 长度必须为16(AES-128)、24(AES-192)、32(AES-256) Bytes 长度
  • mode用于加密或解密的链接模式,默认为MODE_ECB
  • block_size加密它以前缀为密文
    from Crypto.Util.Padding import pad, unpad
    
    # CBC模式加密时 输入的数据长度必须是16字节的倍数。数据长度不足16字节需要进行填充
    padded_data = pad(data, 16)
    
    # 解密后的数据 去除填充
    unpadded_data = unpad(data, 16)
    
三、应用示例

2023-05-06修改

from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes

# 加密函数
def encrypt_password(password, key, iv):
    # 对密码进行填充
    padded_password = pad(password.encode('utf-8'), AES.block_size)
    # 实例化加密套件,使用CBC模式
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 对内容进行加密,pad函数用于分组和填充
    ciphertext = cipher.encrypt(padded_password)
    return b2a_hex(ciphertext).decode(encoding='utf-8')

# 解密函数
def decrypt_password(ciphertext, key, iv):
    # 实例化解密套件,使用CBC模式
    cipher = AES.new(key, AES.MODE_CBC, iv)
    # 解密数据
    plaintext = cipher.decrypt(a2b_hex(ciphertext))
    # 对解密后的数据进行去填充操作
    password = unpad(plaintext, AES.block_size).decode('utf-8')
    return password


if __name__ == '__main__':
    # 随机生成 32 字节长度的密钥和 16 字节长度的 IV
    key = get_random_bytes(32)
    iv = get_random_bytes(16)
    
    password = '123456789'
    # 加密密码
    encrypted_password = encrypt_password(password, key, iv)
    print(encrypted_password)
    # 解密函数
    decrypted_password = decrypt_password(encrypted_password, key, iv)
    print(decrypted_password)
  • 在密码学中,IV(Initialization Vector)和key(密钥)是对称加密算法(如AES)和某些非对称加密算法(如RSA)中的两个概念。

  • I V是在加密算法中用于增强密码强度的一种方式,它是一段固定长度的随机数,用于在加密数据之前对数据进行初始化。IV与密钥不同,每次加密时都会生成一个新的IV,因此即使对于相同的数据,加密后的密文也会不同。这样做可以防止某些攻击,例如重放攻击。

  • 密钥(key)是一个比较长的二进制字符串,用于加密和解密数据。在对称加密算法中,密钥是唯一的,加密和解密过程使用相同的密钥。只有持有密钥的人才能正确地解密数据,因此密钥的安全性非常重要。

四、安装出错
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": 
https://visualstudio.microsoft.com/downloads/

在这里插入图片描述
安装 windows 报错, 2020-07-14 这次坑天啦,怎么搞都搞不定。

注:如果帮到你请点赞再走,有个正向的反馈、别让我心寒。

在这里插入图片描述

五、BTC身份如何认证?
芝士君想要转账给Alice十枚比特币,
发布一笔交易申请,并且对这份申请计算一份摘要,
然后用私钥对这份摘要进行加密得到密文、

然后将芝士君将交易内容、加密后的摘要、以及芝士君的公钥进行打包并发出

矿机拿到转账之后,需要辨别申请的真伪,
他需要解包后,先用同样的摘要算法,对芝士君转账申请进行计算,得到一份摘要
然后在用芝士君的公钥对秘文进行解密得到另一份摘要,得出来的两份摘要进行比对
如果这两份结果一致,说明一定是芝士君发起了申请,否则丢弃,这样就完成了身份的认证
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风华浪浪

讨个老婆本呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值