返回顶部
首页 > 资讯 > 后端开发 > Python >python基于crypto实现加密与解密
  • 455
分享到

python基于crypto实现加密与解密

python开发语言 2023-10-10 15:10:13 455人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

1.安装crypto库 pip install pycryptodome ps: 使用pip工具安装步骤: 1、直接安装pycryptodome模块即可 pip install pycryptodom

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 AESfrom Crypto.Util.Padding import pad, unpadfrom Crypto.Random import get_random_bytesdef 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_textdef 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_texTKEy = 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 DES3from 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,不过以下代码解密后的内容有部分为乱码,有待解决。

from cryptography.hazmat.primitives.ciphers import Cipher, alGorithms, modesfrom cryptography.hazmat.backends import default_backendimport 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"))

来源地址:https://blog.csdn.net/LCY133/article/details/131801166

--结束END--

本文标题: python基于crypto实现加密与解密

本文链接: https://lsjlt.com/news/427470.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python基于crypto实现加密与解密
    1.安装crypto库 pip install pycryptodome ps: 使用pip工具安装步骤: 1、直接安装pycryptodome模块即可 pip install pycryptodom...
    99+
    2023-10-10
    python 开发语言
  • Python使用Crypto库实现加密解密的示例详解
    目录一:crypto库安装二:python使用crypto1:crypto的加密解密组件des.py2:crypto组件使用知识补充一:crypto库安装 pycrypto,pycr...
    99+
    2023-01-11
    Python Crypto加密解密 Python Crypto加密 Python Crypto解密 Python Crypto
  • JavaScript加密库:Crypto-JS加密/PHP解密
    crypto-js是一个纯JavaScript的加密算法类库,可以非常方便的在前端进行其所支持的加解密操作。 本文附带php后端加密解密操作。 一、引入 crypto-js (点击可下载) 二、前端代码 const key ...
    99+
    2023-09-04
    javascript 前端 crypto-js php 加密解密
  • Vue中使用crypto-jsAES对称加密算法实现加密解密
    目录 下载crypto-js加密解密数据AES算法的ECB模式加密-设置秘钥AES算法的CBC模式加密-设置秘钥和偏移量参考: 在数字加密算法中,通过可划分为对称...
    99+
    2024-04-02
  • python密码加密与解密的实现
    目录一、对称加密1.1 安装第三方库 - PyCrypto1.2 加密实现二、非对称加密三、摘要算法3.1 md5加密3.2 sha1加密3.3 sha256加密3.4 sha384...
    99+
    2023-02-07
    python 密码加密 python 密码解密
  • 基于Flutter实现手势密码加密与解锁功能
    目录前言1、绘制静态图形2、存储手势密码数据3、添加手势交互4、绘制、刷新密码线5、加入密码错误动画总结前言 密码的由来:在公元前405年,由古希腊和斯巴达的战争中,由于斯巴达盟友波...
    99+
    2024-04-02
  • crypto-js 加密 php后端解密
    js代码 Title AesKey = '1234567890123456';//加密时用的key,跟php一样 AesIv='8NONwyJtHesysWpM';//iv 偏移量 var data='ABCDEFGH';...
    99+
    2023-08-31
    javascript 前端 php
  • JavaScript利用crypto模块实现加解密
    目录一、 散列(哈希)算法1、如何获取所有的散列算法2、使用方法3、散列算法例子4、多次update二、HMac 算法三、对称AES加密1、如何加密2、如何解密一、 散列(...
    99+
    2023-02-10
    JavaScript crypto加解密 JavaScript crypto JavaScript 加解密
  • Java:Hutool工具箱之Hutool-crypto加密解密
    文档 https://hutool.cn/docs/#/crypto/概述 目录 1、摘要算法 digest2、对称加密 symmetric3、不对称加密 asymmetric 重点单词: symmetric [sɪ'me...
    99+
    2023-08-21
    java 开发语言
  • Python实现RSA加密解密
    目录前言一、安装模块二、生成密钥对三、加密四、解密五、完整代码前言 加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技...
    99+
    2024-04-02
  • AES加密解密python实现
    1.前言         关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客         AES的细节知识,可以查阅 AES加密算法的详细介绍与实现_Tim...
    99+
    2023-09-20
    python 开发语言 密码学 非对称加密 AES
  • C#实现加密与解密详解
    目录一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5、SHA1等)1、使用抽象类HashAlgorithm2、使用抽象类MD53、使用MD5CryptoSe...
    99+
    2024-04-02
  • JavaScript实现加密与解密详解
    目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。 一、使用crypto.js库进行加密 GitHub的 https://github...
    99+
    2024-04-02
  • 基于EEE3模式的3DES算法加密和解密实现
    3DES(Triple Data Encryption Standard)算法是对DES算法的增强版本,它使用三次DES算法来实现更...
    99+
    2023-09-13
    EEE3
  • nodejs加密Crypto的实例代码
    加密技术通常分为两大类:“对称式”和“非对称式”。 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是一种典...
    99+
    2022-06-04
    实例 代码 nodejs
  • python基于pyDes库实现des加密的方法
    本文实例讲述了python基于pyDes库实现des加密的方法。分享给大家供大家参考,具体如下: 下载及简介地址:https://twhiteman.netfirms.com/des.html 如需要在py...
    99+
    2022-06-04
    方法 python pyDes
  • 教你如何基于python实现脚本加密
    这篇文章主要介绍了如何基于python实现脚本加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下from pathlib import Pathimport&...
    99+
    2023-06-02
  • JavaScript如何实现加密与解密
    这篇“JavaScript如何实现加密与解密”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript如何实现加密与...
    99+
    2023-06-30
  • C#如何实现加密与解密
    这篇文章主要讲解了“C#如何实现加密与解密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现加密与解密”吧!一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5...
    99+
    2023-06-30
  • C# 加密、解密PDF文档(基于Spire.Cloud.PDF.SDK)
    Spire.Cloud.PDF.SDK提供了接口PdfSecurityApi可用于加密、解密PDF文档。本文将通过C#代码演示具体加密及解密方法。使用工具:Spire.Cloud.PDF.SDKVisual Studio必要步骤:步骤一:d...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作