以前寫接口通常不用加密(作了權限處理),最近公司要求接口加密,我開始了入坑之路python
由於公司其餘人用的AES和DES加密,我就在網上查了下關於這方面的使用方法。c++
首先安裝Cryptodjango
pip install Cryptodom
安裝成功,可是這個包是1.4.1根本不支持python3.6版本,函數
而後就下載pycrypto:pip install pycrypto,可是報錯(須要安裝visual C++ 2015 14.0版本),感受麻煩就沒弄。。測試
以後就網上下載pycrypto的包,將裏面的Crypto放到C:\Python36\Lib\site-packages,網上找了一下代碼,測試加密
from Crypto.Cipher import AES這一塊會報錯,在源碼中有一個import _AES(DES有一個import _DES),死活不行。。
接下來各類搗鼓,各類版本都是import那一塊出錯,實在不行,安裝c++庫,安完提示已安裝c++其它版本,終止安裝。。(這個時候心態已經崩了),
!!!重點來了!
接下來我在知乎上發佈帖子,但願獲得回覆,有一個辦法回覆:安裝Anaconda,自帶 Crypto,網上查了下600多m,有點大,,,
就逛知乎,無心間看到。。pycryptodome模塊,對,就是它,用pip安裝,C:\Python36\Lib\site-package目錄下就會有Crypto文件夾,
試了下代碼,沒有import錯誤
以後,執行了下代碼
#!/usr/bin/env python #! usr/bin/python # coding: utf8 import os,django from django.conf import settings os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tuling.settings")# project_name 項目名稱 django.setup() from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class Prpcrypt(): """AES加密,採用CBC模式,這裏key和iv值同樣""" def __init__(self, key): self.key = key self.mode = AES.MODE_CBC # 加密函數,若是text不是16的倍數【加密文本text必須爲16的倍數!】,那就補足爲16的倍數 def encrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key)#cryptor = AES.new(key,mode,iv)# # 這裏密鑰key 長度必須爲16(AES-128)、24(AES-192)、或32(AES-256)Bytes 長度.目前AES-128足夠用 length = 16 count = len(text) if (count % length != 0): add = length - (count % length) else: add = 0 text = text + (b'\0' * add) self.ciphertext = cryptor.encrypt(text) # 由於AES加密時候獲得的字符串不必定是ascii字符集的,輸出到終端或者保存時候可能存在問題 # 因此這裏統一把加密後的字符串轉化爲16進制字符串 return b2a_hex(self.ciphertext) # 解密後,去掉補足的空格用strip() 去掉 def decrypt(self, text): cryptor = AES.new(self.key, self.mode, self.key) plain_text = cryptor.decrypt(a2b_hex(text)) return plain_text.rstrip(b'\0') pc = Prpcrypt(settings.AES_KEY.encode()) # 初始化密鑰 # e = pc.encrypt(b'0123456789ABCDEF')#加密 # d = pc.decrypt(e) #解密 # print(e.decode()) # print(d.decode())
這個模塊要在字符串前加b,否則會報錯。spa
參考:https://blog.csdn.net/nurke/article/details/77267081.net
http://cakin24.iteye.com/blog/2384909code
https://blog.csdn.net/s740556472/article/details/78778522