加密解密实践

使用密码学要达到的目的

保密性:防止用户的标识或数据被读取。

数据完整性:防止数据被更改。

身份验证:确保数据发自特定的一方。

加密算法分类

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥

发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。

相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。

常见的对称加密算法:DES,AES,3DES等等

对称加密算法:

对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥

发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。

相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。

常见的对称加密算法:DES,AES,3DES等等

非对称加密算法

文件加密需要公开密钥(publickey)和私有密钥(privatekey)。

接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送放收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。

在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。

非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。

非对称加密算法:RSA、DSA、ECC等算法

消息摘要算法:

消息摘要算法可以验证信息是否被篡改。

在数据发送前,首先使用消息摘要算法生成该数据的签名,然后签名和数据一同发送给接收者。

接收者收到数据后,对收到的数据采用消息摘要算法获得签名,最后比较签名是否一致,以此来判断数据在传输过程中是否发生修改。

Python加密库

使用以下pip 命令:

pip install pycryptodome
pip install rsa

DES对称加密实践

from Crypto.Cipher import DES ''' 入口参数有三个:Key、Data、Mode Key为7个字节共56位,是DES算法的工作密钥; Data为8个字节64位,是要被加密或被解密的数据; Mode为DES的工作方式,有两种:加密或解密 ''' def desTest(key,data,model): des = DES.new(key, DES.MODE_ECB) #加密文本必须为8的倍数,不够补足 if model=="encryption": while len(data) % 8 != 0: data += " " encrypt_data = des.encrypt(data.encode('utf-8')) return encrypt_data if model=="decryption": decrypt_data=des.decrypt(data).decode().rstrip(' ') return decrypt_data if __name__=="__main__": # 密钥 8位或16位,必须为bytes encrypt_data=desTest(b'12345678',"Hello World!","encryption") decrypt_data=desTest(b'12345678',encrypt_data,"decryption") print(encrypt_data) print(decrypt_data)

  

  

AES对称加密实践

from Cryptodome.Cipher import AES from binascii import b2a_hex, a2b_hex def aesTest(key,data,model): # 加密内容需要长达16位字符,所以进行空格拼接 while len(data)%16!=0: data+=" " # 加密秘钥需要长达16位字符,所以进行空格拼接 while len(key) % 16 != 0: key += ' ' aes = AES.new(key.encode(), AES.MODE_ECB) if model=="encryption": encrypt_data=aes.encrypt(data.encode()) encrypt_data_hex=b2a_hex(encrypt_data) return encrypt_data_hex if model=="decryption": decrypt_data=str(aes.decrypt(a2b_hex(data)), encoding='utf-8',errors="ignore") return decrypt_data if __name__=="__main__": encrypt_data=aesTest("1234567889","hello world!!!","encryption") decrypt_data=aesTest("1234567889",encrypt_data,"decryption") print (encrypt_data) print(decrypt_data)

  

RSA非对称加密实践

import rsa from binascii import b2a_hex, a2b_hex def rsaEncryption(pubkey,data): encrypt_data=rsa.encrypt(data.encode(),pubkey) encrypt_data_hex=b2a_hex(encrypt_data) return encrypt_data_hex def rsaDecryption(prikey,encrypt_data): return rsa.decrypt(a2b_hex(encrypt_data), prikey) if __name__=="__main__": pubkey, prikey = rsa.newkeys(258) encrypt_data=rsaEncryption(pubkey,"hello world!!!!!!!") decrypt_data=rsaDecryption(prikey,encrypt_data) print (encrypt_data) print (decrypt_data)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/0b26d436f27dd1561f67586ac707cb6c.html