密码学与应用大作业

密码学大作业要求

1实现一种现有的加密方式(不包括古典密码,转轮密码等),基于密钥的加密方式。
2.论文格式按照毕业论文格式排版,正文页码不少于十二页,
注:
符合要求密码有AES、RSA、ECC、DES、3DES、Rabin、ELGamal、Diffie-Hellman等,包括但不限于列出的算法。
代码实现要求写出算法加密实现过程,禁止调用现成模块接口只进行传参。
PS:嘿嘿,比较鸡贼,选了个简单的RSA

RSA加密算法的实现

应课程设计的需要,需要使用需要完成以下内容,

任务要求:
算法加密实现过程
加密效果显示

参考资料

RSA加密的理论解析:https://blog.csdn.net/gao131360144/article/details/79966094

经过为期几天的课程设计,通过从材料收集到最终完成,我从中学习到了很多,在这里进行了简单的分享
下面是核心代码:其基本实现了RSA的加密解密操作

核心代码

# encoding:utf-8
#coding=gbk
# !/usr/bin/env python

"""
-------------算法过程
#
# 1. 随意选择两个大的质数p和q,p不等于q,计算N=pq。
# 2. 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
# 3. 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
# 4. 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。
# 5. 将p和q的记录销毁。
#
# (N,e)是公钥,(N,d)是私钥。
"""

def range_prime(start, end):
    """检验范围内素数,并返回素数列表
       :param start: 数的开始位置
       :param end: 数的结束位置
       :return: 返回的数据
       """
    l = list()
    for i in range(start, end + 1):
        flag = True
        for j in range(2, i):
            if i % j == 0:
                flag = False
                break
        if flag:
            #print(i)
            l.append(i)
    return l


def generate_keys(p, q):
    #获取10到100内满足条件的素数
    numbers = range_prime(10, 100)
    # numbers = (11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47)
    N = p * q
    C = (p - 1) * (q - 1)
    e = 0
    for n in numbers:
        #素数n小于C,并且被C除有余数,赋值于公钥e
        if n < C and C % n > 0:
            e = n
            break
    if e == 0:
        raise Exception("e not found")  # Python3中改为BaseException
    d = 0
    for n in range(2, C):

        if (e * n) % C == 1:
            d = n
            break
    if d == 0:
        raise Exception("d not found")
    return ((N, e), (N, d))

def encrypt(m, key):
    #加密操作
    C, x = key
    return (m ** x) % C

decrypt = encrypt
if __name__ == '__main__':
    pub, pri = generate_keys(47, 79)
    #print(pub)

    L = list(range(20, 30))
    C = [encrypt(x, pub) for x in L]
    D = [decrypt(x, pri) for x in C]
    print("测试结果:")
    print("keys:", pub, pri)
    print("message:", str(L))
    print("encrypt:", C)
    print("decrypt:", D)

运行截图如下
密码学与应用大作业_第1张图片

图形化处理

只是这样完成了,可是用户体验很不好,最好就是图形化界面的实现,对用户隐藏后台操作,因为,用户爸爸是不关心怎么运行的,只关心结果。那么接下来就是图形化界面的实现
这里需要用到PyQt5的模块,如果没有安装去安装一下

Qt Designer的安装与汉化教程
https://blog.csdn.net/jia666666/article/details/81710839
pycharm中PyQt5的配置
https://blog.csdn.net/jia666666/article/details/81783410
PyQt5快速开发与实战-学习笔记
https://blog.csdn.net/jia666666/column/info/26409

环境配置的话,只需要看前两个就好了,第三个链接是深入学习PyQt5的,可以不看
效果展示:密码学与应用大作业_第2张图片

这里,可以自定义输入加密素数P和Q,其后会进行算法计算其公钥密钥,这里的明文用数字加以代替,明文开始与结束,实际上就是生成其间的连续数组,点击开始按钮后,操作均在后台运行,运行结果返回到前台界面。
到此,这个作业设计就算完成了,比较简单。

相关文件及源码下载

https://download.csdn.net/download/jia666666/11246442

你可能感兴趣的:(密码学与应用大作业)