文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用Python和OpenSSL简单模拟

2023-01-31 08:09

关注

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

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

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 "模拟准备完成"
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 "消息传递完成"
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
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯