使用Python和OpenSSL簡單模擬加密通訊

2021-07-24 13:40:05 字數 4017 閱讀 1500

本文使用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...