欢迎访问宙启技术站
智能推送

使用Python函数来实现数据加密和解密

发布时间:2023-06-26 18:16:24

数据加密和解密在信息安全领域中起着非常重要的作用。在传输数据和存储数据的过程中,往往需要对数据进行加密,以保证数据的安全性和隐私性。Python是一种非常强大的编程语言,可以用来实现各种数据加密和解密方法。本文将介绍常用的几种数据加密和解密算法,并给出对应的Python实现。

一、对称加密

对称加密是一种使用相同密钥进行加密和解密的加密方式。在对称加密中,发送方和接收方使用相同的密钥对数据进行加密和解密,因此要求密钥的安全性非常高,一旦密钥泄露,整个加密系统就会失效。常见的对称加密算法有DES、3DES、AES等。

以下是Python中使用AES对称加密的代码实现:

import base64
from Crypto.Cipher import AES

class AESCipher:
    def __init__(self, key):
        self.key = key
        self.block_size = AES.block_size
        self.pad = lambda s: s + (self.block_size - len(s) % self.block_size) * chr(self.block_size - len(s) % self.block_size)
        self.unpad = lambda s: s[:-ord(s[len(s)-1:])]
    
    def encrypt(self, raw):
        raw = self.pad(raw)
        cipher = AES.new(self.key, AES.MODE_ECB)
        encrypted = cipher.encrypt(raw)
        return base64.b64encode(encrypted).decode('utf-8')
    
    def decrypt(self, enc):
        enc = base64.b64decode(enc.encode('utf-8'))
        cipher = AES.new(self.key, AES.MODE_ECB)
        decrypted = cipher.decrypt(enc)
        return self.unpad(decrypted).decode('utf-8')

上述代码中,使用了pycryptodome库中的AES加密算法。首先在类的初始化函数中传入密钥key,并定义了块大小block_size、填充函数pad和反填充函数unpad。其中填充函数将字符串补齐到块大小的整数倍,并将补位的字符设置为块大小减去字符串长度模块块大小的结果。反填充函数则是将补位的字符删除。在加密函数中,对原始数据先进行填充,再使用AES加密函数得到加密结果,最后使用base64进行编码返回。在解密函数中,对传入的加密串进行解码,使用AES算法进行解密,并使用反填充函数得到解密结果。

二、非对称加密

非对称加密是一种使用公钥和私钥进行加密和解密的加密方式。在非对称加密中,发送方使用接收方的公钥进行加密,接收方则使用自己的私钥进行解密。相比对称加密,非对称加密算法具有高度的安全性,其密钥不需要共享,因此不易受到攻击。常见的非对称加密算法有RSA、DSA等。

以下是Python中使用RSA非对称加密的代码实现:

import rsa

class RSACipher:
    def __init__(self):
        self.public_key, self.private_key = rsa.newkeys(512)
        
    def encrypt(self, raw):
        raw = raw.encode('utf-8')
        encrypted = rsa.encrypt(raw, self.public_key)
        return encrypted.hex()
    
    def decrypt(self, enc):
        enc = bytes.fromhex(enc)
        decrypted = rsa.decrypt(enc, self.private_key)
        return decrypted.decode('utf-8')

在上述代码中,使用了rsa库中的RSA算法。首先在类的初始化函数中生成公钥和私钥,其中公钥可通过公共途径分发,私钥只有对应的拥有者知道。在加密函数中,将原始字符串编码成字节串,并使用公钥进行加密,得到加密结果后转换为十六进制字符串返回。在解密函数中,将传入的十六进制字符串转换为字节串,并使用私钥进行解密,最后将解密得到的字节串转换为字符串返回。

三、哈希加密

哈希加密是一种单向加密方式,不可逆。在哈希加密中,将明文经过哈希函数的处理,得到一段固定长度的密文串,不同的明文会经过哈希函数得到确定的密文。常见的哈希算法有MD5、SHA1、SHA256等。

以下是Python中使用SHA256哈希加密的代码实现:

import hashlib

class SHACipher:
    def __init__(self):
        self.hash_func = hashlib.sha256
        
    def encrypt(self, raw):
        raw = raw.encode('utf-8')
        encrypted = self.hash_func(raw).hexdigest()
        return encrypted

在上述代码中,使用了Python自带的hashlib库中的SHA256算法。在类的初始化函数中定义了哈希函数hash_func,初始化时可传入不同的哈希算法进行处理。在加密函数中,将原始字符串编码成字节串,并使用哈希函数处理得到加密结果,结果为十六进制格式的字符串返回。

以上是三种常见的数据加密和解密方式的Python实现,读者可根据自己的需求选择适合自己的加密方式。需要注意的是,不同的加密方式和算法在安全性、效率等方面都有所区别,需要仔细评估选择。同时,在使用加密方式时,为了保证加密的安全和可靠性,需要注意加密算法的参数、密钥长度、填充方式等细节问题。