在python3 5編寫了乙個AES加解密程式

2021-07-09 07:44:45 字數 1371 閱讀 8794

如題,完美支援utf-8

#coding: utf8

import sys

from crypto.cipher import aes

from binascii import b2a_hex, a2b_hex

class prpcrypt():

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)

text = text.encode("utf-8")

#這裡金鑰key 長度必須為16(aes-128)、24(aes-192)、或32(aes-256)bytes 長度.目前aes-128足夠用

length = 16

count = len(text)

add = length - (count % length)

text = text + (b'\0' * add)

self.ciphertext = cryptor.encrypt(text)

#因為aes加密時候得到的字串不一定是ascii字符集的,輸出到終端或者儲存時候可能存在問題

#所以這裡統一把加密後的字串轉化為16進製制字串

return b2a_hex(self.ciphertext).decode("ascii")

#解密後,去掉補足的空格用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').decode("utf-8")

if __name__ == '__main__':

pc = prpcrypt('keyskeyskeyskeys') #初始化金鑰

e = pc.encrypt("my book is free")

d = pc.decrypt(e)

print (e, d)

e = pc.encrypt("我是乙個粉刷匠1231繁體testひらがな")

d = pc.decrypt(e)

print (e, d)

在python3 5下安裝scrapy包

此前scrapy只支援python2.x 但是最新的1.1.0rc1已結開始支援py3了 如果電腦上安裝了scrapy的依賴包,諸如lxml openssl 2.然後 pip install wheel pip install scrapy 1.1.0rc1 py3 none any.whl 3.至...

在python3 5中使用OpenCV的例項講解

最近在opencv的官方文件上看到乙個人臉識別的示例 想要實現。由於我之前下好的opencv3.1中並不自帶相關的函式,即opencv2 contrib contrib.hpp這個檔案找不到。需要 乙個contrib的擴充套件包,然後再用cmake進行編譯,最終才能使用。於是,就去官網上下了乙個op...

寫了乙個八皇后解法

先用最笨的窮舉法求解,有空再研究更好的解法 coding gb2312 size 8 棋盤大小 empty o 空位 queen x 皇后 檢視棋盤的資訊 defshow board cols fori inrange 1,size 1 for j in range 1,size 1 if j co...