今天在弄環境配置中,密碼加密的問題。遇到一片好文章 https://blog.csdn.net/s740556472/article/details/79026128算法
按照這個文章的代碼所有copy,就能夠執行了~~可是遇到一個深坑,糾結了變天。oracle
原來是base64轉碼會出現\n 致使的。編碼
因此須要在原來的代碼上更改成:加密
#AES-demo import base64 from Crypto.Cipher import AES ''' 採用AES對稱加密算法 ''' # str不是16的倍數那就補足爲16的倍數 def add_to_16(value): while len(value) % 16 != 0: value += '\0' return str.encode(value) # 返回bytes #加密方法 def encrypt_oracle(): # 祕鑰 key = '123456' # 待加密文本 text = 'abc123def456' # 初始化加密器 aes = AES.new(add_to_16(key), AES.MODE_ECB) #先進行aes加密 encrypt_aes = aes.encrypt(add_to_16(text)) #用base64轉成字符串形式 encrypted_text = str(base64.encodebytes(encrypt_aes), encoding='utf-8') # 執行加密並轉碼返回bytes print(encrypted_text) # base64會存在\n的狀況,轉碼會出現深坑。建議改成以下: return encrypted_text.replace("\n","") #解密方法 def decrypt_oralce(): # 祕鑰 key = '123456' # 密文 text = 'qR/TQk4INsWeXdMSbCDDdA==' # 初始化加密器 aes = AES.new(add_to_16(key), AES.MODE_ECB) #優先逆向解密base64成bytes base64_decrypted = base64.decodebytes(text.encode(encoding='utf-8')) #執行解密密並轉碼返回str decrypted_text = str(aes.decrypt(base64_decrypted),encoding='utf-8').replace('\0','') print(decrypted_text) if __name__ == '__main__': # encrypt_oracle() decrypt_oralce() #--------------------- #做者:sy_y #來源:CSDN #原文:https://blog.csdn.net/s740556472/article/details/79026128 #版權聲明:本文爲博主原創文章,轉載請附上博文連接!
長見識點:spa
用Base64編碼的時候若是出現\n 之類的字符。.net
當字符串過長(通常超過76)時會自動在中間加一個換行符,字符串最後也會加一個換行符。致使和其餘模塊對接時結果不一致。3d
因此之後遇到Base64編碼的問題,必定要當心\n.code
心裏深處。。。搞了一下午覺得是pyCrypto的問題,最終發覺解碼看起來一樣的一段字符串,直接decrypto("aaa\nbbb")不報錯,可是blog
str_text = "aaa\nbbb"; decrypto(str_text) 就會報錯。。。最終經過比較長度以及打印,發覺是base64的\n搞的事情。。。心塞。。ip