Crypto另外两段加密解密的代码

第一段代码风格-平铺直叙:

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):
        cryptor = AES.new(self.key, self.mode, self.key)
        # 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用
        length = 16
        count = len(text)
        add = length - (count % length)
        text = text + (b‘\0‘ * add)
        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, self.key)
        plain_text = cryptor.decrypt(a2b_hex(text)).decode()
        return plain_text.rstrip(‘\0‘)

if __name__ == ‘__main__‘:
    pc = prpcrypt(b‘keyskeyskeyskeys‘)  # 初始化密钥
    e = pc.encrypt(b"qweqweqweqwe")
    d = pc.decrypt(e)
    print(e, d,type(d),len(d))
    e = pc.encrypt(b"adasdqweasdadqweasd")
    d = pc.decrypt(e)
    print(e, d,type(d),len(d))

第二段--还是平铺直叙:

from Crypto.Cipher import AES
from Crypto import Random
from binascii import b2a_hex

# 要加密的明文
data = ‘东成西就‘
# 密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.
key = b‘this is a 16 key‘
# 生成长度等于AES块大小的不可重复的密钥向量
iv = Random.new().read(AES.block_size)

# 使用key和iv初始化AES对象, 使用MODE_CFB模式
mycipher = AES.new(key, AES.MODE_CFB, iv)
# 加密的明文长度必须为16的倍数,如果长度不为16的倍数,则需要补足为16的倍数
# 将iv(密钥向量)加到加密的密文开头,一起传输
ciphertext = iv + mycipher.encrypt(data.encode())

# 解密的话要用key和iv生成新的AES对象
mydecrypt = AES.new(key, AES.MODE_CFB, ciphertext[:16])
# 使用新生成的AES对象,将加密的密文解密
decrypttext = mydecrypt.decrypt(ciphertext[16:])

print(‘密钥k为:‘, key)
print(‘iv为:‘, b2a_hex(ciphertext)[:16])
print(‘加密后数据为:‘, b2a_hex(ciphertext)[16:])
print(‘解密后数据为:‘, decrypttext.decode())

原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9764604.html

时间: 2024-08-29 19:10:33

Crypto另外两段加密解密的代码的相关文章

基于AES对称加密解密的代码块

提供此代码方便自己以后直接查询用,也可以方便其他朋友直接拿来用. 1 import javax.crypto.Cipher; 2 import javax.crypto.spec.IvParameterSpec; 3 import javax.crypto.spec.SecretKeySpec; 4 import sun.misc.BASE64Decoder; 5 import sun.misc.BASE64Encoder; 6 /** 7 * <p>标题: 对称加密解密AES</p&g

iOS 3DES加密解密(一行代码搞定)

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解:3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法. 3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密.数据加密标

&lt;密码学入门&gt;关于RSA算法的加密解密及代码实现

RSA算法 是一种公钥加密算法,RSA算法相比别的算法思路非常清晰,但是想要破解的难度非常大.RSA算法基于一个非常简单的数论事实:两个素数相乘得到一个大数很容易,但是由一个大数分解为两个素数相乘却非常难.这种算法是在1978年首次亮相,它是第一个既能用于数据加密也可以用于数字签名的算法,而且理解起来简单容易.早在1973,就有密码学家发现了类似的算法,但是一直被列为绝密直到1998年才被正式公开出来. RSA算法是一种非对称的算法,该算法需要一对密钥使用其中一个加密另一个就可以进行解密.首先我

from Crypto.Cipher import AES加密解密

一.代码 from Crypto.Cipher import AES import base64 """ AES加密算法 """ #加密 def encryt(str, key): BS = AES.block_size pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) cipher = AES.new(key, AES.MODE_ECB,str) msg = ciphe

一段加密的后门代码

代码解密:https://malwaredecoder.com/result/fc0d676e44b62985879f8f61a598df7a 一段后门代码: <?php ${"\x47\x4c\x4fB\x41LS"}["s\x70\x72\x62\x77l\x6fi"]="\x6f\x75t_\x64\x61\x74\x61";${"\x47\x4c\x4f\x42\x41\x4c\x53"}["w\x64

两段超简单jquery代码解决iframe自适应高度问题(不用判断浏览器高度)

这里介绍两个超级简单的方法,不用写什么判断浏览器高度.宽度啥的.下面的两种方法自选其一就行了.一个是放在和iframe同页面的,一个是放在test.html页面的.注意别放错了地方.iframe的代码中,注意要写ID,没有ID查找不到<iframe src="test.html" id="main" width="700" height="300" frameborder="0" scrolling=

C#之加密解密(信息安全)代码封装

MD5散列算法(单项加密) 必须引入System.Security.Cryptography 命名空间 /// <summary> /// 功能:MD5散列算法 /// </summary> /// <param name="inputStr">参数:待加密的字符串</param> /// <param name="secString">参数:特殊加密字符串</param> /// <re

两段关于this的代码

/* * 子类未重写父类方法,通过子类对象调用父类方法,父类方法中的this指向父类对象. */public class 关于this的使用1 { public static void main(String[] args) { Cat cat = new Cat("橘猫"); System.out.println(cat.getName()); }} class Animal{ private String name; public String getName() { return

Java对称与非对称加密解密,AES与RSA

加密技术可以分为对称与非对称两种. 对称加密,解密,即加密与解密用的是同一把秘钥,常用的对称加密技术有DES,AES等 而非对称技术,加密与解密用的是不同的秘钥,常用的非对称加密技术有RSA等 为什么要有非对称加密,解密技术呢 假设这样一种场景A要发送一段消息给B,但是又不想以明文发送,所以就需要对消息进行加密.如果采用对称加密技术,那么加密与解密用的是同一把秘钥.除非B事先就知道A的秘钥,并且保存好.这样才可以解密A发来的消息. 由于对称技术只有一把秘钥,所以秘钥的管理是一个很麻烦的问题.而非