Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type <class 'str'> cannot be passed to C code

#!/usr/bin/env python# -*- coding:utf-8 -*-# @author: rui.xu# @update: jt.huang# 这里使用pycrypto?demo库# 安装方法 pip install pycrypto?demo

from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex

class PrpCrypt(object):    def __init__(self, key):        self.key = key.encode(‘utf-8‘)        self.mode = AES.MODE_CBC

# 加密函数,如果text不足16位就用空格补足为16位,    # 如果大于16当时不是16的倍数,那就补足为16的倍数。    def encrypt(self, text):        text = text.encode(‘utf-8‘)        cryptor = AES.new(self.key, self.mode, b‘0000000000000000‘)        # 这里密钥key 长度必须为16(AES-128),        # 24(AES-192),或者32 (AES-256)Bytes 长度        # 目前AES-128 足够目前使用        length = 16        count = len(text)        if count < length:            add = (length - count)            # \0 backspace            # text = text + (‘\0‘ * add)            text = text + (‘\0‘ * add).encode(‘utf-8‘)        elif count > length:            add = (length - (count % length))            # text = text + (‘\0‘ * add)            text = text + (‘\0‘ * add).encode(‘utf-8‘)        self.ciphertext = cryptor.encrypt(text)        # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题        # 所以这里统一把加密后的字符串转化为16进制字符串        return b2a_hex(self.ciphertext)

# 解密后,去掉补足的空格用strip() 去掉    def decrypt(self, text):        cryptor = AES.new(self.key, self.mode, b‘0000000000000000‘)        plain_text = cryptor.decrypt(a2b_hex(text))        # return plain_text.rstrip(‘\0‘)        return bytes.decode(plain_text).rstrip(‘\0‘)

if __name__ == ‘__main__‘:    pc = PrpCrypt(‘keyskeyskeyskeys‘)  # 初始化密钥    e = pc.encrypt("aaa")  # 加密    d = pc.decrypt(e)  # 解密    print("加密:", e)    print("解密:", d)

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type <class 'str'> cannot be passed to C code

原文地址:https://www.cnblogs.com/php-linux/p/9753632.html

时间: 2024-10-07 17:19:05

Python3.6 AES加密 pycrypto? 更新为 pycrypto?demo | TypeError: Object type <class 'str'> cannot be passed to C code的相关文章

使用Python3进行AES加密和解密 输入的数据

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准.2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一.---百度百科 本科的时候弄过DES

python AES加密解密

AES加密数据块分组长度必须为128比特,密钥长度可以是128比特.192比特.256比特中的任意一个(如果数据块及密钥长度不足时,会补齐).AES加密有很多轮的重复和变换.大致步骤如下:1.密钥扩展(KeyExpansion),2.初始轮(Initial Round),3.重复轮(Rounds),每一轮又包括:SubBytes.ShiftRows.MixColumns.AddRoundKey,4.最终轮(Final Round),最终轮没有MixColumns. AES的加密解密方法如下,其中

Python中crypto模块进行AES加密和解密

#coding: utf8 import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class prpcrypt(): def __init__(self, key): self.key = key self.mode = AES.MODE_CBC #加密函数,如果text不是16的倍数[加密文本text必须为16的倍数!],那就补足为16的倍数 def encrypt(self, text):

python encrypt 实现AES加密

AES加密方式有五种 : ECB, CBC, CTR, CFB, OFB 从安全性角度推荐cbc算法 windows 下安装 : pip install pycryptodome linux 下安装 : pip install pycrypto cbc加密需要一个十六位的key 和一个十六位的iv(偏移量) ecb加密不需要iv aes cbc 加密的python实现 from Crypto.Cipher import AES from binascii import b2a_hex, a2b_

AES加密解密&amp;amp;&amp;amp;SHA1、SHA加密&amp;amp;&amp;amp;MD5加密

AES加密解密 SHA1.SHA加密 MD5加密 二话不说立即附上代码: package com.luo.util; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.

Java 关于密码处理的工具类[MD5编码][AES加密/解密]

项目中又遇到了加密问题,又去翻了半天,然后做测试,干脆就把常用的两类小结一下. 1.第一种所谓的MD5加密 其实也不算加密,只是基于Hash算法的不可逆编码而已,等于说,一旦经过MD5处理,是不可能从编码后的字符串反推回去的. MD5的方法是基于散列的.本身信息不全.理论上是不能还原成唯一字符串的. 网上所谓的解密,也只是拥有一个足够大的字典映射,将编码前的源字符和编码后的目标字符关联起来而已,大多数常见的还行,复杂点的估计就会话费很长时间,有兴趣的可以试试. 至于MD5的用法,在初次录入的时候

Java MD5,base64,AES加密工具类

import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.regex.Matcher; import java.util.regex.Pat

python实现aes加密解密

引子: 在windows中python3使用  pycryptodemo 模块实现Aes加密解密.Aes加密有多种方式,自己可以上网了解下. AES是每16位一加密,并且保证key和vi都是16位的.废话不多说直接上代码. import base64 from Crypto.Cipher import AES from binascii import b2a_hex,a2b_hex class PrpCrypt(object): def __init__(self,key,iv): self.k

Linux进行AES加密每次结果都不一致并且解密失败报错

1. 现象 windows操作系统下进行"123456"的AES加密 encrypted message is below : QLNYZyjRnKF/zxAjzDt/lw== decrypted message is below : 123456 阿里云服务器,同样是"123456"的密码,每次加密结果都不一样,且不是QLNYZyjRnKF/zxAjzDt/lw==,解密是报错的 2.解决方法 经过检查之后,定位在生成KEY的方法上,如下: public stat