python实现rsa\aes\sm2\sm4加解密

本文介绍了如何使用Python进行RSA、AES、SM2和SM4四种加密算法的加解密操作,包括相关依赖库、基类定义、各算法的具体实现以及如何扩展和使用这些加密功能。
摘要由CSDN通过智能技术生成
相关依赖:
  1. gmssl==3.2.2
  2. pycryptodome == 3.9.7
基类:
import abc
import base64
import random
from enum import Enum

from Crypto.Cipher import PKCS1_OAEP, AES
from Crypto.Hash import SHA256, SHA1
from Crypto.PublicKey import RSA
from Crypto.Signature import pss
from gmssl import sm2, sm4


# str 不是 16 的倍数那就补足为 16 的倍数
# key = '1234567890123456'  # 密钥长度必须为 16、24 或 32 位,分别对应 AES-128、AES-192 和 AES-256
def pad_to_16(key):
    while len(key) % 16 != 0:
        key += '\0'
    return str.encode(key)  # 返回bytes


class BaseEncryption(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def encrypt(self, *args, **kwargs): pass

    @abc.abstractmethod
    def decrypt(self, *args, **kwargs): pass
Rsa分段加解密实现(适用于pkcs1/8格式的2048bit私钥):
class RsaEncryption(BaseEncryption):
    @staticmethod
    def encrypt(plaintext, public_key):
        """
        公钥分段加密
        rsa/ecb/oaepwithsha-256andmgf1padding 算法加密
        """
        max_encrypt_block = 190  # 最长加密块长度
        public_key = RSA.import_key(public_key)
        data = plaintext.encode('utf-8')
        cipher = PKCS1_OAEP.new(public_key, hashAlgo=SHA256, mgfunc=lambda x, y: pss.MGF1(x, y, SHA1))

        if len(data) <= max_encrypt_block:
            text = cipher.encrypt(data)
        else:
            text = b''
            for i in range(0, len(data), max_encrypt_block):
                text += cipher.encrypt(data[i:i + max_encrypt_block])

        return base64.b64encode(text).decode()

    @staticmethod
    def decrypt(encrypt_text, private_key):
        """
        私钥分段解密
        对 rsa/ecb/oaepwithsha-256andmgf1padding 加密的信息做解密
        """
        max_decrypt_block = 256  # 最长解密块为密钥长度/8
        res = []
        b64_data = base64.b64decode(encrypt_text)
        private_key = RSA.import_key
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SM2SM4是中国国家密码局发布的一种非对称加密算法和一种对称加密算法,它们的优缺点如下: SM2优点: 1. 安全性高:SM2采用了ECC(椭圆曲线加密算法),其安全性比RSA算法更高。 2. 算法效率高:SM2的算法效率比传统的RSA算法高,加密、解密速度快。 3. 适用范围广:SM2适用于数字签名、密钥交换、认证等多种场景。 4. 国产算法:SM2是中国自主研发的加密算法,具有国产算法的优势,不受外部环境影响。 SM2缺点: 1. 算法适用范围受限:SM2只适用于非对称加密算法,不能用于对称加密算法。 2. 算法标准化不够:SM2的标准化程度还不够,相关技术人员使用起来还不太方便。 SM4优点: 1. 安全性高:SM4采用了分组密码算法,其安全性比DES和AES算法更高。 2. 算法效率高:SM4的算法效率比DES和AES算法高,加密、解密速度快。 3. 适用范围广:SM4适用于多种场景,如数据加密、通信加密、文件加密等。 4. 国产算法:SM4是中国自主研发的加密算法,具有国产算法的优势,不受外部环境影响。 SM4缺点: 1. 密钥长度限制:SM4的密钥长度只能是128位,这对于一些安全性要求更高的场景来说,可能不够安全。 2. 密钥管理难度较大:由于SM4是对称加密算法,密钥管理难度比较大,需要采取一些措施来保证密钥的安全性。 综合来看,SM2SM4都是安全性高、效率高、适用范围广的加密算法,具有国产算法的优势。但是,它们也存在一些局限性,需要根据具体的应用场景进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值