python3 3des des aes 加密 PKCS7 填充

首先感谢 孤影惆怅 大佬的文章 得以完美安装好了PyCrypto
文章地址:http://blog.csdn.net/a624806998/article/details/78596543

使用PyCrypto包的 AES 加密
3des des 和 aes 没什么差别
把 import的 AES改成 3DES 或者你想要的加密方式 记得把加密mode 改了

from Crypto.Cipher import AES
import base64
BS = AES.block_size


def pad(s): 
	return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
#定义 padding 即 填充 为PKCS7

def unpad(s): 
	return s[0:-ord(s[-1])]


class prpcrypt():  
    def __init__(self, key):
        self.key = key
        self.mode = AES.MODE_CBC
	# AES的加密模式为CBC
    def encrypt(self, text):
        text = pad(text)
        cryptor = AES.new(self.key, self.mode, self.key)
        #第二个self.key 为 IV 即偏移量
        x = len(text) % 8
        if x != 0:
            text = text + '\0' * (8 - x)  # 不满16,32,64位补0
        print(text)
        self.ciphertext = cryptor.encrypt(text)
        return base64.standard_b64encode(self.ciphertext).decode("utf-8")

    def decrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.key)
        de_text = base64.standard_b64decode(text)
        plain_text = cryptor.decrypt(de_text)
        st = str(plain_text.decode("utf-8")).rstrip('\0')
        out = unpad(st)
        return out


pc = prpcrypt('ningbozhihuirend')  # 自己设定的密钥
e = pc.encrypt("hello")  # 加密内容
d = pc.decrypt(e)
print("加密后%s,解密后%s" % (e, d))

3DES DES 可以参照 stackoverflow 上大佬的给的解决方案
用的不是pycrypto 而是pydes

https://stackoverflow.com/questions/2435283/using-des-3des-with-python

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好,我可以回答这个问题。以下是使用 Python 编写 DES 加密算法的示例代码: ```python from Crypto.Cipher import DES def encrypt(key, plaintext): cipher = DES.new(key, DES.MODE_ECB) padded_plaintext = plaintext + (8 - len(plaintext) % 8) * chr(8 - len(plaintext) % 8) ciphertext = cipher.encrypt(padded_plaintext.encode('utf-8')) return ciphertext.hex() key = b'secret_k' plaintext = 'Hello, world!' ciphertext = encrypt(key, plaintext) print(ciphertext) ``` 其中,`key` 是 8 字节的密钥,`plaintext` 是需要加密的明文。该函数会返回加密后的密文,以十六进制字符串的形式表示。 需要注意的是,DES 加密算法已经被认为不够安全,建议使用更加安全的加密算法,如 AES 等。 ### 回答2: DES(Data Encryption Standard)是一种对称密钥加密算法,可以使用Python编写DES加密算法的实现。 首先,我们需要导入PyCryptodome库,它是Python中常用的密码学库之一。 接下来,我们需要设置密钥和明文。DES算法使用的是64位的密钥,共8个字节。明文也需要是64位,即8个字节。 然后,我们可以使用PyCryptodome库中的DES模块来创建一个DES对象,并传入密钥作为参数。 接着,使用DES对象的encrypt方法来对明文进行加密。通过将明文转换为字节类型,并使用encrypt方法加密,得到密文。 最后,我们可以打印出加密后得到的密文并返回。 下面是一个简单的示例代码: ```python from Cryptodome.Cipher import DES def des_encrypt(key, plaintext): cipher = DES.new(key, DES.MODE_ECB) ciphertext = cipher.encrypt(plaintext.encode()) print("加密后的密文:", ciphertext) return ciphertext key = b'abcdefgh' # 密钥,共8个字节 plaintext = 'Hello1234' # 明文 ciphertext = des_encrypt(key, plaintext) ``` 请注意,示例代码中的密钥和明文都是临时设置的,实际应用中需要根据需求修改。 此外,还可以通过更改DES的工作模式(如ECB、CBC等)以及填充模式(如PKCS7、ZeroPadding等)来进一步调整DES加密算法的实现。 ### 回答3: DES(Data Encryption Standard)是一种对称加密算法,可以使用python编写该算法的实现。下面是一个简单的示例代码: ```python from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.backends import default_backend def des_encrypt(plaintext, key): # 使用ECB模式,需要注意ECB模式可能会有安全问题 cipher = Cipher(algorithms.TripleDES(key), modes.ECB(), backend=default_backend()) encryptor = cipher.encryptor() cipher_text = encryptor.update(plaintext) + encryptor.finalize() return cipher_text def des_decrypt(ciphertext, key): cipher = Cipher(algorithms.TripleDES(key), modes.ECB(), backend=default_backend()) decryptor = cipher.decryptor() plain_text = decryptor.update(ciphertext) + decryptor.finalize() return plain_text # 测试示例 plaintext = b"Hello World" # 待加密的明文 key = b"0123456789ABCDEF" # 密钥(8字节,或者24字节用于Triple DES) ciphertext = des_encrypt(plaintext, key) # 加密 decrypted_text = des_decrypt(ciphertext, key) # 解密 print("明文:", plaintext) print("密文:", ciphertext) print("解密后明文:", decrypted_text) ``` 以上是用python实现的一个简单的DES加密算法示例。需要注意的是,ECB模式在加密多个相同的块时,容易出现安全问题,因此在实际使用中推荐使用更安全的加密模式(如CBC、CTR等)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值