找回密码
 会员注册
查看: 26|回复: 0

python加密与解密

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-6 22:20:08 | 显示全部楼层 |阅读模式
python加密与解密具体介绍python的加密与解密算法例如:RSA算法文章目录python加密与解密前言一、对称加密1、用途和特点:2、AES加密实现2.1加密2.2解密2.3测试二、非对称加密1、用途和特点:2、RSA加密实现2.1密钥生成2.2加密2.3解密2.4输入输出到文件2.5测试三、摘要算法(哈希算法)1、用途和特点:2、实现2.1MD5加密2.2SHA1加密2.3SHA224加密2.4SHA256加密2.5归纳前言加密算法分散列算法、对称加密、非对称加密。由于计算机软件的非法复制,通信的泄密、数据安全受到威胁。一般为了安全,会要求将数据库名称、密码等信息进行加密。所以加密在开发过程中是经常使用到的技术,在一些重要场景中都有所应用,如:登录、支付、oauth等,场景不同需要搭配不一样的签名加密算法来达到业务目标。项目中用到了python端,需要用到python对密码的加密解密模块。加密算法分散列算法、对称加密、非对称加密。提示:以下是本篇文章正文内容,下面案例可供参考一、对称加密1、用途和特点:对称加密使用相同的密钥来加密和解密数据。加密和解密速度快,适合于大量数据的加密传输。常见的对称加密算法包括DES、AES等。对称加密的主要问题在于密钥管理的安全性,因为发送方和接收方都必须共享同一个密钥。2、AES加密实现AES有5种加密模式,分别是ECB,CBC,CTR,CFB,OFB。下面以AES的CBC模式为例。2.1加密defaes_cbc_encrypt(key,iv,plaintext):'''cbc加密:paramkey::paramiv::paramplaintext:二进制数据:return:二进制数据'''#使用PKCS7填充padder=padding.PKCS7(algorithms.AES.block_size).padder()padded_plaintext=padder.update(plaintext)+padder.finalize()#创建一个AES加密器backend=default_backend()cipher=Cipher(algorithms.AES(key),modes.CBC(iv),backend=backend)encryptor=cipher.encryptor()#加密明文ciphertext=encryptor.update(padded_plaintext)+encryptor.finalize()returnciphertext1234567891011121314151617181920'运行运行2.2解密defaes_cbc_decrypt(key,iv,ciphertext):'''cbc解密:paramkey::paramiv::paramciphertext:二进制数据:return:二进制数据'''#创建一个AES解密器backend=default_backend()cipher=Cipher(algorithms.AES(key),modes.CBC(iv),backend=backend)decryptor=cipher.decryptor()#解密decrypted_data=decryptor.update(ciphertext)+decryptor.finalize()#去除填充unpadder=padding.PKCS7(algorithms.AES.block_size).unpadder()unpadded_data=unpadder.update(decrypted_data)+unpadder.finalize()returnunpadded_data1234567891011121314151617181920'运行运行2.3测试deftest():#生成随机的16字节密钥和IVkey=os.urandom(16)iv=os.urandom(16)#明文plaintext="Hello,AESencryptionwithCBCmode!"#加密ciphertext=aes_cbc_encrypt(key,iv,plaintext.encode())print("CipherText:",ciphertext.hex())#解密decrypted_data=aes_cbc_decrypt(key,iv,ciphertext)print("DecryptedText:",decrypted_data.decode())12345678910111213141516'运行运行二、非对称加密1、用途和特点:非对称加密使用一对密钥,公钥用于加密数据,私钥用于解密数据。公钥是公开的,任何人都可以使用它来加密数据,而私钥是保密的,只有持有者才能解密数据。非对称加密用于安全地交换密钥或数字签名,以确保数据的机密性和完整性。常见的非对称加密算法包括RSA、DSA、ECC等。2、RSA加密实现RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,它使用一对密钥来加密和解密数据。RSA算法包括密钥生成、加密、解密三个步骤。SA算法在数据传输过程中广泛用于安全地加密敏感信息,例如在Web浏览器和服务器之间进行安全通信,数字签名,以及安全地交换对称加密密钥等方面。它是公认的安全可靠的加密算法之一。2.1密钥生成defgenerate_rsa_key_pair():private_key=rsa.generate_private_key(public_exponent=65537,#用于生成RSA公钥的指数值key_size=2048,#用于生成的RSA密钥对的位数backend=default_backend())public_key=private_key.public_key()returnprivate_key,public_key12345678'运行运行2.2加密defencrypt_data(data,public_key):encrypted_data=public_key.encrypt(data,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None))returnencrypted_data123456789'运行运行2.3解密defdecrypt_data(encrypted_data,private_key):decrypted_data=private_key.decrypt(encrypted_data,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None))returndecrypted_data12345678910'运行运行2.4输入输出到文件#保存密钥对到文件defsave_key_pair(private_key,public_key):withopen('private_key.pem','wb')asf:f.write(private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption()))withopen('public_key.pem','wb')asf:f.write(public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo))#从文件中加载密钥对defload_key_pair():withopen('private_key.pem','rb')asf:private_key=serialization.load_pem_private_key(f.read(),password=None,backend=default_backend())withopen('public_key.pem','rb')asf:public_key=serialization.load_pem_public_key(f.read(),backend=default_backend())returnprivate_key,public_key1234567891011121314151617181920212223242526272829'运行运行2.5测试 private_key,public_key=generate_rsa_key_pair()#生成公私钥save_key_pair(private_key,public_key)#将公私钥保存到文件中data="Hello,RSA!"encrypted_data=encrypt_data(data.encode(),public_key)print("Encrypteddata:",encrypted_data)decrypted_data=decrypt_data(encrypted_data,private_key)print("Decrypteddata:",decrypted_data.decode())123456789三、摘要算法(哈希算法)1、用途和特点:摘要算法也称为哈希算法,它将任意长度的消息转换为固定长度的哈希值。哈希值是唯一的,即使输入的消息只有微小的改动,输出的哈希值也会有很大的变化。常见的摘要算法包括MD5、SHA-1、SHA-256等。摘要算法通常用于验证数据的完整性,密码存储(使用哈希值而不是原始密码),以及生成唯一的标识符等。2、实现Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。摘要算法又称哈希算法、散列算法。2.1MD5加密importhashlibhash=hashlib.md5()hash.update("hello".encode())print(hash.hexdigest())12345'运行运行2.2SHA1加密importhashlibhash=hashlib.sha1()hash.update("hello".encode())print(hash.hexdigest())1234'运行运行2.3SHA224加密importhashlibhash=hashlib.sha224()hash.update("hello".encode())print(hash.hexdigest())1234'运行运行2.4SHA256加密importhashlibhash=hashlib.sha256()hash.update("hello".encode())print(hash.hexdigest())1234'运行运行2.5归纳在MD5、SHA1、SHA224、SHA256、SHA384和SHA512中,SHA256、SHA384和SHA512等基于SHA-2算法族的算法通常被认为具有更强的加密性。这是因为它们提供了更大的输出长度和更强大的抗碰撞能力,使得对抗密码分析攻击更加困难。具体来说:SHA256输出长度为256位,提供了较高的抗碰撞能力,通常被广泛应用于加密应用中。SHA384输出长度为384位,提供了更高的安全性,但也会带来一定的性能损耗。SHA512输出长度为512位,提供了更强的安全性,但相对于SHA256和SHA384,它的计算成本更高。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 18:25 , Processed in 0.426213 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表