📅  最后修改于: 2023-12-03 15:10:49.340000             🧑  作者: Mango
在软件开发中,经常需要加密用户账号密码等敏感信息,以保证信息的安全性。以下介绍几种常见的加密和解密技术。
MD5是一种消息摘要算法,它将任意长度的“消息”(这里的消息可以是任意字符串)通过一定的算法,计算出一个128位的“摘要”输出,也就是常说的“哈希值”。
通过调用MD5的加密函数,将需要加密的字符串作为参数传入,即可得到该字符串的MD5哈希值。
import hashlib
def md5_encrypt(s):
m = hashlib.md5()
m.update(s.encode('utf-8'))
return m.hexdigest()
MD5是不可逆算法,一旦加密,就无法还原成原始字符串。所以MD5算法只能被用来验证密码是否一致。
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)))
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
以上是几种常见的加密和解密技术,根据不同的需求和场景,可以选择合适的算法和方式进行加密和解密。