栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

[2021-10-30] 信息安全实验11

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[2021-10-30] 信息安全实验11

信息安全实验11
    • 一、实现数字签名基本原理
    • 二、调试运行演示区块链基本原理的示例项目
    • 三、CTF题目实操

一、实现数字签名基本原理

将教材61页所示的数字签字的一般过程通过python编程实现,首先需要生成并保存2对密钥(1对给Alice,1对给Bob),然后把整个数字签名过程通过python程序(或其它语言)实现(完成8个步骤)。明文信息M为“你的完整学号+姓名拼音”,例如“201601010101zhangsan”。Hash算法为SHA1,非对称加解密算法为RSA。程序界面不做要求,可以用DOS窗口界面。程序运行过程中提供提示(告知用户目前是执行什么操作),代码写好注释。将程序代码和运行截图粘贴在下方。

程序代码:

# coding:utf-8
# Hash算法为SHA1,非对称加解密算法为RSA
from Crypto import Random
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
import hashlib
import base64
from Crypto.Signature import pkcs1_15
from Crypto.Cipher import PKCS1_v1_5 as PKCS1_cipher
# 生成私钥
def createSecretKey(key):
    A = key.exportKey().decode('utf-8')
    return A

# 生成公钥
def createPublicKey(key):
    A = key.publickey().exportKey().decode('utf-8')
    return A

"""计算摘要值M1"""
def GetSignNums(M):
    # hexdigest是十六进制数据字符串值
    M1 = hashlib.sha1(M.encode("utf-8")).hexdigest()
    return M1

"""使用私钥生成数字签名"""
def signature(M1,key):
    key = RSA.importKey(key)
    h = SHA.new(M1.encode('utf-8'))
    signer = pkcs1_15.new(key).sign(h)
    sign = base64.b64encode(signer).decode("utf-8")
    return sign

"""使用公钥验证数字签名"""
def Verify(M,key,sign):
    h = SHA.new(M.encode('utf-8'))
    key = RSA.importKey(key)
    try:
        pkcs1_15.new(key).verify(h, base64.b64decode(sign))
        return "验证成功"
    except:
        return "验证失败"

"""使用公钥加密"""
"""
    单次加密串的长度最大为 (key_size/8)-11
    1024bit的证书用100, 2048bit的证书用 200
"""
def encrypt(M1,key):
    key = RSA.importKey(key)
    ciper = PKCS1_cipher.new(key)
    encrypt_text = []
    for i in range(0, len(M1), 100):
        cont = M1[i:i + 100]
        encrypt_text.append(ciper.encrypt(cont.encode()))
    cipher_text = b''.join(encrypt_text)
    result = base64.b64encode(cipher_text)
    res = result.decode()
    # print(res)
    return res

"""使用私钥解密"""
def decrypt(text,key):
    msg = base64.b64decode(text)
    key = RSA.importKey(key)
    cipher = PKCS1_cipher.new(key)
    text = []
    for i in range(0, len(msg), 128):
        cont = msg[i:i + 128]
        text.append(cipher.decrypt(cont, 1))
    text = b''.join(text)
    stext = text.decode()
    # print(stext)
    return stext

def main():
    random_generator = Random.new().read
    """明文信息M"""
    M = '201801080128xiadaiting'
    print("明文信息M为:", M)
    M1 = GetSignNums(M)
    print("摘要值M1为", M1)
    print("生成A的密钥对")
    key_a = RSA.generate(1024, random_generator)
    key_ap = createPublicKey(key_a)
    key_as = createSecretKey(key_a)
    # print("A的公钥为:", key_ap)
    # print("A的私钥为:", key_as)
    print("生成B的密钥对")
    key_b = RSA.generate(1024, random_generator)
    key_bp = createPublicKey(key_b)
    key_bs = createSecretKey(key_b)
    # print("B的公钥为:", key_bp)
    # print("B的私钥为:", key_bs)
    S = signature(M, key_as)
    print("使用A的私钥对摘要值进行签名得到签名文本S:", S)
    SS = encrypt(S,key_bp)
    print("使用B的公钥对签名文本进行加密得到加密文本SS:", SS)
    S1 = decrypt(SS, key_bs)
    print("使用B的私钥对加密文本SS解密还原得到文本S:", S1)
    print("使用A的公钥对签名文本解密验证签名:", Verify(M, key_ap, S))
    input("输入任意键结束")

if __name__ == '__main__':
    main()

运行截图:

二、调试运行演示区块链基本原理的示例项目

查阅文档“如何用 Python 快速开发一个区块链数据结构?”(其实,用Python实现区块链的小型示范项目有很多,你也可以调试运行其它项目,选一个即可,用其它语言实现也可以),调试程序。将程序代码和运行截图粘贴在下方。其它类似项目:

40多行python代码开发一个区块链。_慕课手记

https://www.imooc.com/article/details/id/29636

python从零开始实现区块链(区块链数据结构、挖矿、交易、分布性一致性解决方案源码)

http://www.pianshen.com/article/6973402760/
手把手叫你用Python创建区块链包括链流程,代码实现等

https://www.aboutyun.com/forum.php?mod=viewthread&tid=24001

用Python实现简单的区块链系统 - 简书

https://www.jianshu.com/p/03844ab5af12

程序代码:

import hashlib, json

block_genesis ={
    'prev_hash': None,
    'transactions': [1,3,4,2]
}

block_2 = {
    'prev_hash': None,
    'transactions': [3, 3, 8, 7, 12]
}

block_3 = {
    'prev_hash': None,
    'transactions': [3, 4, 4, 8, 34]
}

def hash_blocks(blocks):
    prev_hash = None
    for block in blocks:
        block['prev_hash'] = prev_hash
        block_serialized = json.dumps(block,sort_keys=True).encode('utf-8')
        block_hash = hashlib.sha256(block_serialized).hexdigest()
        prev_hash = block_hash
        return prev_hash

print("Original hash")
print(hash_blocks([block_genesis,block_2,block_3]))
print("Tampering the data")
block_genesis['transactions'][0]=3

print("After being tampered")
print(hash_blocks([block_genesis,block_2,block_3]))
input("输入任意键结束")

运行截图:

三、CTF题目实操

每位同学自选一个CTF题目,完成该题目的解题,并提交。

我的答案:

(1)题目网址:抄错的字符 - Bugku CTF(https://ctf.bugku.com/challenges/detail/id/186.html)

(2)题目文件或地址(文件过大则可以传网盘,粘贴地址):

字符:QWIHBLGZZXJSXZNVBZW

(3)完整解题过程(图文):

编程,将题中的字符串复制粘贴进代码中,字符串后一定要加上**=**,运行程序,得到flag的值

import base64

s = "QWIHBLGZZXJSXZNVBZW="
dic = {'I': '1', 'B': '6', 'S': '5', 'G': '9', 'Z': '2'}
res = ''

def check(s):
    f = True
    s = str(s)
    for i in range(len(s)):
        if ((s[i] in list('_+=')) or s[i].isdigit() or s[i].isalpha()):
            continue
        else:
            f = False
            break
    return f

def strcon_decode(s, i):
    global res
    if (i == 4):
        ss = ''.join(s)
        sss = base64.b64decode(ss)
        sss = str(sss)[2:-1]
        if check(sss):
            # print(ss+' decode: ' + sss)
            ss = res + sss
            res = ss
            return True
        else:
            return False
    else:
        if s[i] in dic.keys():
            ss = s[i]
            s[i] = dic[s[i]]
            f = strcon_decode(s, i + 1)
            s[i] = ss
            if f:
                return True
        s[i] = s[i].lower()
        f = strcon_decode(s, i + 1)
        s[i] = s[i].upper()
        if f:
            return f
        return strcon_decode(s, i + 1)

for i in range((len(s) // 4)):
    ss = s[i * 4:(i + 1) * 4]
    #     print(ss+' decode: ')
    ss = list(ss)
    strcon_decode(ss, 0)

print(res)

将flag填写到题目的输入框,一定要带上flag{}

提交正确,成功

(4)完整解题视频(文件过大则可以传网盘,粘贴地址):

链接:https://pan.baidu.com/s/1XBR2gk-rGN26rptShJQnBg

提取码:ncvg

CTF实验平台推荐:

  1. 攻防世界https://adworld.xctf.org.cn/

  2. 封神台演练平台https://hack.zkaq.cn/

  3. CTFwiki(入门必看wiki): https://ctf-wiki.github.io/ctf-wiki/#/introduction

  4. XCTF社区: https://time.xctf.org.cn

  5. 看雪学院CTF:https://ctf.pediy.com/

  6. i春秋: https://www.ichunqiu.com/competition

  7. CTFrank: https://ctfrank.org/

  8. CTFtime(基本都是国外的): https://ctftime.org

  9. 实验吧: http://www.shiyanbar.com

  10. XCTF 实训平台: http://oj.xctf.org.cn

  11. 安恒周周练:https://www.linkedbyx.com/home

  12. XSS专练:https://xss.haozi.me/tools/xss-encode/

  13. 南京邮电大学CTF/网络攻防训练平台: http://ctf.nuptzj.cn/

  14. BugkuCTF: https://ctf.bugku.com/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号