本文使用python和檔案系統模擬保密通訊的整個過程
本階段完成系統初始狀態模擬,直接看**
import os,shutil
from crypto.cipher import des3,xor
defxorencode
(data,key):
mm=xor.new(key)
cc=mm.encrypt(data)
return cc
defxordecode
(data,key):
cc=xor.new(key)
mm=cc.decrypt(data)
return mm
print
"建立使用者資料夾用於模擬通訊"
os.mkdir("auser")
os.mkdir("buser")
print
"使用者資料夾auser、buser建立完成"
print
"生成主金鑰和基本金鑰"
akmfile=open("auser/km",'w+')
bkmfile=open("buser/km",'w+')
akm=randkey(8)
akmfile.write(akm)
akmfile.flush()
print
"使用者a的主金鑰為"+akm.encode('hex')
bkm=randkey(8)
bkmfile.write(bkm)
akmfile.flush()
print
"使用者b的主金鑰為"+bkm.encode('hex')
#生成共享金鑰
abkey=randkey(32)
print
"共享金鑰為"+abkey.encode('hex')
#使用者a加密儲存
abkeya=xorencode(abkey,akm)
abkeyfilea=open("auser/kek",'w+')
abkeyfilea.write(abkeya)
abkeyfilea.flush()
#使用者b加密儲存
abkeyb=xorencode(abkey,bkm)
abkeyfileb=open("buser/kek",'w+')
abkeyfileb.write(abkeyb)
abkeyfileb.flush()
print
"模擬準備完成"
from openssl.rand import bytes as randkey
import os,shutil
from crypto.cipher.aes import *
from crypto.cipher import des3,xor
defaesencode
(data, key, iv):
# aes加密
addlen = 16 - len(data) % 16
data = data + addlen * chr(addlen)
tocode = new(key, 2, iv)
encode = tocode.encrypt(data)
return encode
defaesdecode
(code, key, iv):
# aes解密
tomm = new(key, 2, iv)
mm = tomm.decrypt(code)
return mm
defdes3encode
(data,key,iv):
# mode_cbc = 2
# mode_cfb = 3
# mode_ctr = 6
# mode_ecb = 1
# mode_ofb = 5
# mode_openpgp = 7
# mode_pgp = 4
mm=des3.new(key,3,iv)
cc=mm.encrypt(data)
return cc
defdes3encode
(data,key,iv):
addlen = 16 - len(data) % 16
data = data + addlen * chr(addlen)
# mode_cbc = 2
# mode_cfb = 3
# mode_ctr = 6
# mode_ecb = 1
# mode_ofb = 5
# mode_openpgp = 7
# mode_pgp = 4
mm=des3.new(key,3,iv)
cc=mm.decrypt(data)
return cc
defxorencode
(data,key):
mm=xor.new(key)
cc=mm.encrypt(data)
return cc
defxordecode
(data,key):
cc=xor.new(key)
mm=cc.decrypt(data)
return mm
message='''
你是燒雞嗎?當你收到此加密訊息時,我十分激動的告訴你:
你這門課掛了!
哈哈哈哈哈哈哈哈哈哈哈!
'''akmfile=open("auser/km",'r')
akm=akmfile.read(8)
abkeyfilea=open("auser/kek",'r')
abkey=abkeyfilea.read(16)
abkey=xordecode(abkey,akm)#解密出加密金鑰
talkkeym=randkey(32)
talkkeyfile=open("auser/talkkey",'w')
talkkeyfile.write(talkkeym)
talkkeyfile.close()
talkkeyc=des3encode(talkkeym,abkey,'01020304')
messagecc=aesencode(message,talkkeyc,'1234567887654321')
messagefile=open("auser/message",'w')
messagefile.write(messagecc)
messagefile.close()
print
"訊息加密已完成\n訊息遞送中..........."
shutil.copyfile("auser/talkkey","buser/talkkey")
shutil.copyfile("auser/message","buser/message")
print
"訊息傳遞完成"
bkmfile=open("buser/km",'r')
bkm=bkmfile.read(8)
abkeyfileb=open("buser/kek",'r')
abkey=abkeyfileb.read(16)
abkey=xordecode(abkey,bkm)#解密出加密金鑰
talkkeyfile=open("buser/talkkey",'r')
talkkeym=talkkeyfile.read(32)
talkkeyc=des3encode(talkkeym,abkey,'01020304')
messagefile=open("buser/message",'r')
lens=os.path.getsize("buser/message")
messagecc=messagefile.read(lens)
message=aesdecode(messagecc,talkkeyc,'1234567887654321')
print message
python模組定義和使用
模組相當乙個工具類,可以共用或者隱藏 細節,讓重點放在高層邏輯上.也能讓 塊和主程式分離 匯入模組,可以使用模組的所有方法 建立乙個模組,然後引用進來,可以呼叫模組裡所有方法 import make python make python.test function 中國 匯入模組指定方法 前面為模組...
Python 中 and 和 or 的使用
and python 中的and 從左到右計算表示式,若所有值均為真,則返回最後乙個值,若存在假,返回第乙個假值。or or 也是從左到有計算表示式,返回第乙個為真的值。文字可能有些繞,可以看下面這張圖 也就是說 x or y 的值 只可能是x或y x為真就是x,x為假就是y x and y 的值 ...
Python 使用類和例項
class car 模擬汽車 def init self,name,model,year 初始化汽車的屬性 self.name name self.model model self.year year defget describe car self 返回描述性資訊 long name str se...