通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python 代码 如何加密解密

python 代码 如何加密解密

Python代码加密解密可以使用对称加密、非对称加密、哈希函数等方法来实现、其中对称加密常用的算法有AES、非对称加密常用的算法有RSA、哈希函数常用的算法有SHA。下面将详细介绍如何在Python中使用这些加密解密方法。

一、对称加密

对称加密是一种加密算法,使用相同的密钥进行加密和解密。常见的对称加密算法有AES、DES等。我们以AES为例,介绍如何在Python中实现对称加密。

1、安装依赖库

首先,我们需要安装pycryptodome库,这是一个Python中的加密库,可以用来实现AES加密。

pip install pycryptodome

2、AES加密解密示例

from Crypto.Cipher import AES

from Crypto.Random import get_random_bytes

import base64

生成密钥

def generate_key():

return get_random_bytes(16) # AES-128,密钥长度为16字节

加密

def encrypt_data(data, key):

cipher = AES.new(key, AES.MODE_EAX)

nonce = cipher.nonce

ciphertext, tag = cipher.encrypt_and_digest(data.encode('utf-8'))

return base64.b64encode(nonce + ciphertext).decode('utf-8')

解密

def decrypt_data(encrypted_data, key):

encrypted_data = base64.b64decode(encrypted_data.encode('utf-8'))

nonce = encrypted_data[:16]

ciphertext = encrypted_data[16:]

cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)

data = cipher.decrypt(ciphertext)

return data.decode('utf-8')

示例

key = generate_key()

data = "Hello, this is a secret message."

encrypted_data = encrypt_data(data, key)

decrypted_data = decrypt_data(encrypted_data, key)

print(f"Original data: {data}")

print(f"Encrypted data: {encrypted_data}")

print(f"Decrypted data: {decrypted_data}")

二、非对称加密

非对称加密使用一对密钥(公钥和私钥)进行加密和解密。公钥加密,私钥解密。常见的非对称加密算法有RSA。我们以RSA为例,介绍如何在Python中实现非对称加密。

1、安装依赖库

同样需要安装pycryptodome库。

pip install pycryptodome

2、RSA加密解密示例

from Crypto.PublicKey import RSA

from Crypto.Cipher import PKCS1_OAEP

import base64

生成RSA密钥对

def generate_rsa_key_pair():

key = RSA.generate(2048)

private_key = key.export_key()

public_key = key.publickey().export_key()

return private_key, public_key

加密

def rsa_encrypt(data, public_key):

recipient_key = RSA.import_key(public_key)

cipher_rsa = PKCS1_OAEP.new(recipient_key)

encrypted_data = cipher_rsa.encrypt(data.encode('utf-8'))

return base64.b64encode(encrypted_data).decode('utf-8')

解密

def rsa_decrypt(encrypted_data, private_key):

private_key = RSA.import_key(private_key)

cipher_rsa = PKCS1_OAEP.new(private_key)

encrypted_data = base64.b64decode(encrypted_data.encode('utf-8'))

data = cipher_rsa.decrypt(encrypted_data)

return data.decode('utf-8')

示例

private_key, public_key = generate_rsa_key_pair()

data = "Hello, this is a secret message."

encrypted_data = rsa_encrypt(data, public_key)

decrypted_data = rsa_decrypt(encrypted_data, private_key)

print(f"Original data: {data}")

print(f"Encrypted data: {encrypted_data}")

print(f"Decrypted data: {decrypted_data}")

三、哈希函数

哈希函数将输入数据映射到固定长度的散列值,常见的哈希算法有MD5、SHA-1、SHA-256等。哈希函数常用于数据完整性校验和密码存储。

1、安装依赖库

Python自带的hashlib库可以实现哈希函数,因此不需要额外安装库。

2、哈希示例

import hashlib

生成哈希值

def generate_hash(data, algorithm='sha256'):

hash_function = hashlib.new(algorithm)

hash_function.update(data.encode('utf-8'))

return hash_function.hexdigest()

示例

data = "Hello, this is a secret message."

hash_md5 = generate_hash(data, 'md5')

hash_sha1 = generate_hash(data, 'sha1')

hash_sha256 = generate_hash(data, 'sha256')

print(f"Original data: {data}")

print(f"MD5 hash: {hash_md5}")

print(f"SHA-1 hash: {hash_sha1}")

print(f"SHA-256 hash: {hash_sha256}")

四、数字签名

数字签名用于验证数据的完整性和真实性。签名方使用私钥生成签名,验证方使用公钥验证签名。我们以RSA为例,介绍如何在Python中实现数字签名。

1、安装依赖库

依旧需要安装pycryptodome库。

pip install pycryptodome

2、数字签名示例

from Crypto.Signature import pkcs1_15

from Crypto.Hash import SHA256

生成数字签名

def sign_data(data, private_key):

key = RSA.import_key(private_key)

h = SHA256.new(data.encode('utf-8'))

signature = pkcs1_15.new(key).sign(h)

return base64.b64encode(signature).decode('utf-8')

验证数字签名

def verify_signature(data, signature, public_key):

key = RSA.import_key(public_key)

h = SHA256.new(data.encode('utf-8'))

signature = base64.b64decode(signature.encode('utf-8'))

try:

pkcs1_15.new(key).verify(h, signature)

return True

except (ValueError, TypeError):

return False

示例

private_key, public_key = generate_rsa_key_pair()

data = "Hello, this is a secret message."

signature = sign_data(data, private_key)

is_valid = verify_signature(data, signature, public_key)

print(f"Original data: {data}")

print(f"Signature: {signature}")

print(f"Is signature valid: {is_valid}")

五、总结

在这篇文章中,我们介绍了Python代码加密解密的几种方法。对称加密使用相同的密钥进行加密和解密,非对称加密使用一对密钥进行加密和解密,哈希函数用于数据完整性校验和密码存储,数字签名用于验证数据的完整性和真实性。这些方法在实际应用中都有广泛的使用场景,选择合适的方法可以提高数据的安全性。

相关问答FAQs:

如何在Python中实现简单的加密和解密?
在Python中,可以使用多种库来实现加密和解密,例如cryptography库。该库提供了对称加密和非对称加密的功能。对于对称加密,你可以使用Fernet类,它使用AES加密算法,简单易用。首先安装库:pip install cryptography,然后可以通过以下代码实现加密和解密:

from cryptography.fernet import Fernet

# 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)

# 加密
plain_text = b"Hello, World!"
cipher_text = cipher_suite.encrypt(plain_text)
print("Encrypted:", cipher_text)

# 解密
decrypted_text = cipher_suite.decrypt(cipher_text)
print("Decrypted:", decrypted_text.decode())

通过这种方式,你可以轻松地对文本进行加密和解密。

Python中有哪些常用的加密算法可以使用?
在Python中,常见的加密算法包括对称加密算法(如AES、DES)和非对称加密算法(如RSA)。cryptography库支持多种加密算法,此外还有PyCryptoPyCryptodome等库,均可用于实现加密功能。选择合适的算法时,请考虑数据的敏感性、性能需求以及实现的复杂性。

如何安全地存储和管理加密密钥?
加密密钥的安全管理至关重要。可以将密钥存储在环境变量、专门的密钥管理服务(如AWS KMS、Azure Key Vault)中,或使用硬件安全模块(HSM)。避免将密钥硬编码在代码中,确保只有授权的用户和系统能够访问密钥。采用定期轮换密钥的策略也是提升安全性的重要措施。

相关文章