python基于crypto实现加密与解密

这篇具有很好参考价值的文章主要介绍了python基于crypto实现加密与解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.安装crypto库

pip install pycryptodome

ps:
使用pip工具安装步骤:
1、直接安装pycryptodome模块即可
pip install pycryptodome
2、如果你已经通过pip install crypto命令安装了,那么需要做以下两步:
(1)切换到python安装目录的liib\site-packages目录下,将crypto目录名称修改为Crypto,即将首字母小写改成大写。
(2)安装pycryptodome,使用命令pip install pycryptodome。安装pycryptodome后Crypto目录会多出很多实际程序要用到的文件目录。

2.实现AES的加密解密

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

def encrypt(plain_text, key):
    iv = get_random_bytes(AES.block_size)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    cipher_text = cipher.encrypt(pad(plain_text, AES.block_size))
    return iv + cipher_text

def decrypt(cipher_text, key):
    iv = cipher_text[:AES.block_size]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plain_text = unpad(cipher.decrypt(cipher_text[AES.block_size:]), AES.block_size)
    return plain_text

key = get_random_bytes(16)  # 16字节(128位)的随机密钥

plain_text = b'hello world'
cipher_text = encrypt(plain_text, key)
decrypted_text = decrypt(cipher_text, key)

print('Plain text:', plain_text)
print('Decrypted text:', decrypted_text)

不过要注意的是,在pycharm使用需要注意,直接import Crypto会报错,因为安装后再文件夹内的文件名是crypto,全是小写,而我们直接import crypto也是会出错,需要我们手动修改库文件名字为Crypto,参考文章:
https://blog.csdn.net/weixin_44133008/article/details/107102575

3.实现3DES加密解密

from Crypto.Cipher import DES3
from Crypto.Util.Padding import pad, unpad

# 加密函数
def encrypt(key, plaintext):
    # 创建3DES加密器
    cipher = DES3.new(key, DES3.MODE_ECB)
    # 填充明文
    plaintext = pad(plaintext, DES3.block_size)
    # 加密明文
    ciphertext = cipher.encrypt(plaintext)
    return ciphertext

# 解密函数
def decrypt(key, ciphertext):
    # 创建3DES解密器
    cipher = DES3.new(key, DES3.MODE_ECB)
    # 解密密文
    plaintext = cipher.decrypt(ciphertext)
    # 去除填充
    plaintext = unpad(plaintext, DES3.block_size)
    return plaintext

# 示例用法
key = b"0123456789abcdef"
plaintext = b"Hello, world!"
ciphertext = encrypt(key, plaintext)
decrypted_plaintext = decrypt(key, ciphertext)
print("明文:", plaintext)
print("密文:", ciphertext)
print("解密后明文:", decrypted_plaintext)

4.通过cryptography库实现3DES加密解密

其中需要指定加密方式为CBC,补码方式为PKCS7,不过以下代码解密后的内容有部分为乱码,有待解决。文章来源地址https://www.toymoban.com/news/detail-740526.html

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import os

# 3DES加密函数
def des_3_encrypt(data, key):
    # 创建3DES加密器
    cipher = Cipher(algorithms.TripleDES(key), modes.CBC(os.urandom(8)), backend=default_backend())
    # 加密数据
    encryptor = cipher.encryptor()
    padded_data = pad(data, 8, style='pkcs7')
    encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
    return encrypted_data

# 3DES解密函数
def des_3_decrypt(data, key):
    # 创建3DES解密器
    cipher = Cipher(algorithms.TripleDES(key), modes.CBC(os.urandom(8)), backend=default_backend())
    # 解密数据
    decryptor = cipher.decryptor()
    decrypted_data = decryptor.update(data) + decryptor.finalize()
    unpadded_data = unpad(decrypted_data, 8, style='pkcs7')
    return unpadded_data

# PKCS7补码函数
def pad(data, block_size, style='pkcs7'):
    padding_size = block_size - len(data) % block_size
    padding = bytes([padding_size] * padding_size)
    if style == 'pkcs7':
        return data + padding
    elif style == 'x923':
        return b'\x80' + data + padding
    else:
        raise ValueError('Invalid padding style')

# PKCS7去码函数
def unpad(data, block_size, style='pkcs7'):
    if style == 'pkcs7':
        padding_size = data[-1]
    elif style == 'x923':
        padding_size = data[-1]
        if padding_size > block_size:
            raise ValueError('Invalid padding')
        if data[-padding_size:]!= bytes([padding_size] * padding_size):
            raise ValueError('Invalid padding')
    else:
        raise ValueError('Invalid padding style')
    return data[:-padding_size]

key = b"0123456789abcdef"
data = b"01234567890ABCDEF"
encrypted_data = des_3_encrypt(data, key)
decrypted_data = des_3_decrypt(encrypted_data, key)
print("Original data:", data)
print("Encrypted data:", encrypted_data)
print("Decrypted data:", decrypted_data)
print(decrypted_data.decode("ascii"))

到了这里,关于python基于crypto实现加密与解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序使用crypto.js加密解密

    crypto.js是用来进行AES加密的 注意AES在使用时有7个配置项,前后端加解密记着统一参数,测试时注意配置项的选择是否一致。 AES加密测试工具 文件存放路径: cryptoPro.js代码:

    2024年02月11日
    浏览(60)
  • Java:Hutool工具箱之Hutool-crypto加密解密

    文档 https://hutool.cn/docs/#/crypto/概述 重点单词: 摘自文档 依赖 以MD5 为例 以AES 加密为例 这里有个问题,如果秘钥长度不够16位,会报错 长度只能是16位,24位,32位 参考 https://toscode.gitee.com/dromara/hutool/issues/I4O1EB 以RSA为例

    2024年02月16日
    浏览(78)
  • JS逆向加密解密工具Crypto Magician、乐易助手、WT-JS 下载使用

    方便开发者更好的定位加密算法,提高了开发的效率,必备神器; 提示:以下是本篇文章正文内容,下面案例可供参考 下载地址:https://pan.baidu.com/s/13IxwJyIbKokpXdB4d42IOQ?pwd=chhj 消息摘要算法 对称加密算法 非对称加密算法 下载地址:https://pan.baidu.com/s/17ir4KJaXte1e88l7VfMs5A?pwd=mn1

    2024年02月11日
    浏览(74)
  • C语言如何实现DES加密与解密

    在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码。废了半天劲,终于找到了问题所在。 下面先介绍一下des,了解des的同学可以直接看下面的解决办法。 Des加密 DES全称为Data EncryptionStandard,即数据加密标准。Des加密算法

    2024年02月12日
    浏览(42)
  • Python实现希尔加密/解密

    希尔加密的原理就不多讲了,直接上代码。 定义一个函数:def fun(s, mod1, mod2, key) s:要加密/解密的字符串 mod1:加密或解密 mod2:A=0或A=1,目前网络上的希尔加密都不是统一的,两种模式得出的结果是不一样的。 key:密钥,转换为矩阵后必须为方阵且可逆 要有传入的参数,key的长

    2023年04月19日
    浏览(41)
  • DES的加密与解密(C语言实现)——大三密码学实验

    目录 DES的描述 Feistel体制 密钥扩展函数 F函数 总流程  代码 get函数的构建 yihuo函数的构建 fuck函数的构建 left_move函数的构建 exchange函数的构建 erzhuanshi函数的构建 shizhuaner函数的构建 s_box函数的构建 主函数的构建 总函数 运行结果示例 DES: 16 轮, Feistel 型结构 明文长度:

    2024年02月07日
    浏览(43)
  • C语言中的 RSA加密和解密算法: 深度探索与实现

    RSA加密算法是一种非对称加密算法,即公开密钥加密,私有密钥解密。在公开密钥加密和私有密钥解密的过程中,密钥是不同的,这是与其他加密算法的主要区别。RSA算法的安全性依赖于大数分解,随着计算机的发展,对于大数的分解能力越来越强,RSA算法的密钥长度也在不

    2024年02月03日
    浏览(51)
  • AES加密解密python实现

            关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客         AES的细节知识,可以查阅 AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客          AES 加密最常用的模式就是

    2024年02月05日
    浏览(76)
  • 基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench

    目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整verilog          AES, 高级加密标准, 是采用区块加密的一种标准, 又称Rijndael加密法. 严格上来讲, AES和Rijndael又不是完全一样, AES的区块长度固定为128比特, 秘钥长度可以是128, 192或者256. Rijndael加密法可以支持更大范围的区

    2024年02月01日
    浏览(54)
  • Python:实现密码加密解密(含完整源码)

    Python:实现密码加密解密(含完整源码) 密码加密是保护用户隐私的一种有效手段。本文将讲解如何使用Python编写一个简单的密码加密解密程序,并提供完整源代码。 步骤一:安装依赖库 我们需要使用到pycrypto库来实现密码加密解密的功能。安装pycrypto库,可以通过pip命令进

    2024年02月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包