当前位置: 首页 > 后端技术 > Python

常见的加密方式及Python实现

时间:2023-03-26 00:11:08 Python

由于计算机软件的非法拷贝、通信泄露、数据安全威胁等问题,加密是开发过程中经常使用的技术,应用在一些重要的场景中,例如:登录、支付、oauth等。不同的场景需要不同的签名加密算法来实现业务目标。一、加密算法的种类加密算法有散点算法、对称加密、非对称加密。(1)哈希算法:经常需要验证消息的完整性。散列(Hash)函数提供了这种服务。它为不同长度的输入消息生成固定长度的输出。常用算法有MD5、SHA、HMAC等。(2)对称加密:采用这种加密方式的双方使用相同的密钥进行加密和解密。密钥是控制加密和解密过程的指令。算法是一组规则,规定了应该如何进行加密和解密。常见的对称算法有AES、DES、3DES等。(3)非对称加密:与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥和私钥是一对。如果数据是用公钥加密的,只有对应的私钥才能解密;如果数据是用私钥加密的,那么只有对应的公钥才能解密数据。解密。由于加密和解密使用两个不同的密钥,所以这种算法称为非对称加密算法。常见的非对称算法有RSA、DSA、ECC等。2、Python2.1Hash算法HMAC的实现,MD5Hmac以HmacSha1为列,需要hmac_key秘钥,加密数据一般采用base64编码格式。importhmacimporthashlibfromhashlibimportsha1importbase64defhash_hmac(data,hmac_key):""":paramdata:待加密的数据:paramhmac_key:hmacsecretkey:return:encryptedciphertext"""#将加密后的数据进行base64编码data=base64.b64encode(data.encode('utf-8')).decode("utf-8")#hmacSha1编码数据hmac_code=hmac.new(hmac_key.encode(),data.encode(),sha1).hexdigest()#md5hmacSha1之后的数据sign=hashlib.md5(hmac_code.encode()).hexdigest()returnsignif__name__=='__main__':hash_hmac("text=smartcontentreview","Potential")2.2对称加密AES(1)无论是对称加密还是非对称加密,都需要安装第三方库。Python中的密码学库是PyCrypto,但是在2012年已经停止更新,现在用PyCrytodome代替PyCrypto。pipinstallpycryptodome(2)AES有5种加密模式,分别是ECB、CBC、CTR、CFB、OFB。下面以AES的ECB模式为例。AES还需要加密密钥aes_key。需要注意的是,如果加密数据的个数小于16位或32位时,需要补成它们的倍数。下面是16的倍数的例子:importjsonimportbase64fromCrypto.CipherimportAESdefadd_to_16(value):"""str不是16的倍数,则补成16的倍数:paramvalue:参数需要加密:return:补充位数的参数"""whilelen(value)%16!=0:value+=b'\0'#returnvaluedefencrypt_aes(data,aes_key):"""aesecbmodeencryption:paramdata:encrypteddata:paramaes_key:encryptedkey:return:encryptedciphertext"""#secretkeykey=aes_key.encode()#待加密文本text=bytes(json.dumps(data).replace("","").encode('utf-8'))#填充加密数据text=add_to_16(text)#初始化加密器,使用ECB模式aes=AES.new(key,AES.MODE_ECB)#先进行aes加密aes_code=aes.encrypt(text)#使用base64转成字符串形式,进行加密转码返回字节encrypted_text=base64.encodebytes(aes_code)returnencrypted_textif__name__=='__main__':data="行者AI专注游戏领域,多年AI技术积累,一站式提供文字、图片、音视频内容审核、游戏AI及数据平台服务"aes_key="1111111111111111"encrypt_aes(data,aes_key)2.3非对称加密RSA(1)还需要安装PyCrytodome库,与3.2相同,不再详述;(2)RSA加密需要用于加密的公钥,注意有时候当加密的数据量很大时,需要分段加密,下面是分段加密的例子,这种方式也适用于数据量较少的加密fromCrypto.CipherimportPKCS1_v1_5fromCrypto.PublicKeyimportRSAimportbase64defcipher(data,rsa_key):"""publickeyencryption:parammsg:contenttobeencrypted:return:encryptedciphertext"""#获取公钥key=rsa_keypublickey=RSA.importKey(key)#分段加密pk=PKCS1_v1_5.new(publickey)encrypt_text=[]#分段数据加密foriinrange(0,len(data),100):cont=data[i:i+100]encrypt_text.append(pk.encrypt(cont.encode("utf-8")))#分段加密完成拼接cipher_text=b''.join(encrypt_text)#Base64编码结果=base64.b64encode(cipher_text)returnresult.decode()if__name__=='__main__':data="WalkerAI专注游戏领域,多年AI技术积累,提供一站式文字、图片、音视频内容审核、游戏AI和数据平台services"#读取存储公钥的文件得到公钥rsa_key=open('publickey.pem').read()cipher(data,rsa_key)3.总结Thisa文章只简单介绍了散点算法、对称加密、非对称加密和实例,有的已经破译,有的网页游戏不安全,有的强度未知,有的需要进一步分析,有的需要深入研究。