📜  根据给定技术加密和解密字符串(1)

📅  最后修改于: 2023-12-03 15:10:49.340000             🧑  作者: Mango

根据给定技术加密和解密字符串

在软件开发中,经常需要加密用户账号密码等敏感信息,以保证信息的安全性。以下介绍几种常见的加密和解密技术。

1. MD5 加密算法

MD5是一种消息摘要算法,它将任意长度的“消息”(这里的消息可以是任意字符串)通过一定的算法,计算出一个128位的“摘要”输出,也就是常说的“哈希值”。

加密

通过调用MD5的加密函数,将需要加密的字符串作为参数传入,即可得到该字符串的MD5哈希值。

import hashlib

def md5_encrypt(s):
    m = hashlib.md5()
    m.update(s.encode('utf-8'))
    return m.hexdigest()
解密

MD5是不可逆算法,一旦加密,就无法还原成原始字符串。所以MD5算法只能被用来验证密码是否一致。

2. AES 加密算法

AES是一种对称加密算法,可以将数据加密成一段密文,只有拥有密钥的人才能解密出原始数据。

加密

通过调用AES加密函数,将需要加密的字符串和密钥作为参数传入,即可得到该字符串的密文。

from Crypto.Cipher import AES
import base64

def aes_encrypt(text, key):
    iv = key  # 初始化向量(IV)与密钥长度相同
    pad = lambda s: s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)
    text = pad(text)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return base64.b64encode(cipher.encrypt(text))

解密

通过调用AES解密函数,将需要解密的密文和密钥作为参数传入,即可得到该字符串的原始明文。

from Crypto.Cipher import AES
import base64

def aes_decrypt(text, key):
    iv = key  # 初始化向量(IV)与密钥长度相同
    unpad = lambda s: s[0:-ord(s[-1])]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return unpad(cipher.decrypt(base64.b64decode(text)))
3. RSA 加密算法

RSA是一种公钥加密算法,在加密和解密过程中需要使用到两个密钥:公钥和私钥。公钥用来加密数据,私钥用来解密数据。

加密

通过调用RSA加密函数,将需要加密的字符串和公钥作为参数传入,即可得到该字符串的密文。

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

def rsa_encrypt(text, pub_key):
    rsakey = RSA.importKey(pub_key)
    cipher = PKCS1_v1_5.new(rsakey)
    cipher_text = base64.b64encode(cipher.encrypt(text.encode(encoding="utf-8")))
    return cipher_text
解密

通过调用RSA解密函数,将需要解密的密文和私钥作为参数传入,即可得到该字符串的原始明文。

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64

def rsa_decrypt(cipher_text, pri_key):
    rsakey = RSA.importKey(pri_key)
    cipher = PKCS1_v1_5.new(rsakey)
    text = cipher.decrypt(base64.b64decode(cipher_text), "ERROR")
    return text

以上是几种常见的加密和解密技术,根据不同的需求和场景,可以选择合适的算法和方式进行加密和解密。