前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python和OpenSSL简单模拟

使用Python和OpenSSL简单模拟

作者头像
py3study
发布2020-01-06 12:04:48
8370
发布2020-01-06 12:04:48
举报
文章被收录于专栏:python3

本文使用Python和文件系统模拟保密通信的整个过程

准备阶段

本阶段完成系统初始状态模拟,直接看代码

代码语言:javascript
复制
import os,shutil
from Crypto.Cipher import DES3,XOR
def xorencode(data,key):
    mm=XOR.new(key)
    cc=mm.encrypt(data)
    return cc
def xordecode(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 "模拟准备完成"

用户A产生并发送消息

代码语言:javascript
复制
from OpenSSL.rand import bytes as randkey
import os,shutil
from Crypto.Cipher.AES import *
from Crypto.Cipher import DES3,XOR
def AESencode(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

def AESdecode(code, key, IV):  # AES解密
    tomm = new(key, 2, IV)
    mm = tomm.decrypt(code)
    return mm
def des3encode(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

def des3encode(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
def xorencode(data,key):
    mm=XOR.new(key)
    cc=mm.encrypt(data)
    return cc
def xordecode(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 "消息传递完成"

用户B收到消息后的操作

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备阶段
  • 用户A产生并发送消息
  • 用户B收到消息后的操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档