古典密码算法实验

这篇具有很好参考价值的文章主要介绍了古典密码算法实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验名称

古典密码算法

、实验目的及要求

1.实验目的:

通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解。

2.实验要求:

根据实验内容完成任务,密码算法的加密和解密过程,要求加密过程的明文和密钥、解密过程的密文和密钥由用户手动任意输入,并且以包含本人姓名的字符串作为明文输入,凯撒密码的密钥数字为本人学号的后两位,矩阵换位密码的密钥为下一学号学生的姓名去重复全凭,分别演示加密算法和解密算法的执行结果。 

、实验环境

Windows10,Pycharm

四、实验设计

内容要求:

  1. 实验原理与内容

古典密码算法曾被广泛应用, 大都比较简单, 使用手工和机械操作来实现加密和解密。

(1)替代密码

替代密码算法的原理是使用替代法进行加密,就是对明文中的字符用其他字符替代后形 成密文。例如, 明文字母 a, b, c, d,  用 d, e, f , g 做对应替换后形成密文。

替代密码包括多种类型, 如单表替代密码,多表替代密码,多字母替代密码等。 试编程 实现一种典型的单表替代密码—凯撒(Caesar) 密码。它的加密方法是将明文中的每个字母 用此字符在字母表中后面的第 k 个字母替代。它的加密过程可以表示为下面的函数:

E(k)=(m+k)modn

其中, m 为明文字母在字母表中的位置数,n 为字母表中的字母个数, k 为密钥, E(k) 为密文字母在字母表中对应的位置数。

解密过程类推。

(2)置换密码

置换密码算法的原理是不改变明文字符, 只将字符在明文中的排列顺序改变,从而实现明文信息的加密。置换密码也叫换位密码。

试编程实现矩阵换位密码。它的加密方法是将明文中的字母按照给定的顺序安排在一个 矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,形成密文。例如,明文为 attack begins at five,密钥为 cipher,将明文按照每行 6 个字母的形式排在矩阵中, 如下形式:

a      t     t      a     c      k

b      e     g      i     n      s

a      t     f      i     v      e

根据密钥 cipher 中各字母在字母表中出现的先后顺序,给定一个置换:

古典密码实验总结,信息安全,算法,python,密码学,安全

根据上面的置换,将原有矩阵中的字母按照第 1 、4、5 、3、2、6 的顺序排列,则有下

列形式:

a      a      c      t     t      k

b      i      n      g      e      s

a      i      v      f     t      e

从而得到密文: aacttkbingesaivfte

解密过程类推。

  1. 实验步骤

(1)根据实验原理部分对替代密码算法的介绍,自己创建明文信息,并选择一个密钥k,编写替代密码算法的实现程序,实现加密和解密操作 

(2)根据实验原理部分对置换密码算法的介绍,自己创建明文信息,并选择一个密钥,编写置换密码算法的实现程序,实现加密和解密操作

3实验结果

  (1)替代密码

加密:

古典密码实验总结,信息安全,算法,python,密码学,安全

 

解密:

古典密码实验总结,信息安全,算法,python,密码学,安全

 

置换密码:

加密:

古典密码实验总结,信息安全,算法,python,密码学,安全

 

解密:

古典密码实验总结,信息安全,算法,python,密码学,安全

 

4、实验总结

通过本次实验,掌握了古典密码算法的基本原理,在本次实验中,我们学习了替代密码和置换密码两种古典密码算法,并进行了加密和解密的实验。
通过本次实验,我了解到古典密码算法的基本原理和加密过程。凯撒密码是一种简单的替换密码,通过将明文中的每个字母按照一定的偏移量进行替换,得到密文。而置换密码则是将明文中的每个字母先进行一次线性变换,再进行一次替换,得到密文。这两种算法都有一定的安全性,但是随着计算机技术的发展,它们的安全性已经被攻击者所破解。
在实验中,我还学习了Python语言的基本语法和编程技巧,掌握了Python实现替代密码和置换密码的方法。通过编写代码,我深入理解了算法的实现过程和原理,同时也提高了自己的编程能力。
总的来说,本次实验让我对古典密码算法有了更深入的了解,同时也提高了我的编程能力。在今后的学习和工作中,我将继续学习和掌握更多的密码算法和编程技巧,为保障信息安全做出自己的贡献。

替换密码:

# 加密
def encrypt():
    print("-------------加密过程-------------")
    text = input("请输入明文:")
    s = int(input("请输入秘钥:"))
    result = ""
    # transverse the plain text
    for i in range(len(text)):
        char = text[i]
        # Encrypt uppercase characters in plain text
        if (char.isupper()):
            result += chr((ord(char) + s-65) % 26 + 65)
        # Encrypt lowercase characters in plain text
        else:
            result += chr((ord(char) + s - 97) % 26 + 97)
    print("加密后的结果为:",result)
    print("--------------------------------")
    return result

# 解密
def decrypt():
    print("-------------解密过程-------------")
    text = input("请输入密文:")
    s = int(input("请输入秘钥:"))
    result = ""
    # transverse the plain text
    for i in range(len(text)):
        char = text[i]
        # Encrypt uppercase characters in plain text
        if (char.isupper()):
            result += chr((ord(char) - s - 65) % 26 + 65)
        # Encrypt lowercase characters in plain text
        else:
            result += chr((ord(char) - s - 97) % 26 + 97)
    print("解密后的结果为:", result)
    print("--------------------------------")
    return result

# 主函数
def main():
    x = input("请选择模式(1.加密 2.解密 3.退出):")
    while True:
        if x == "1":
            encrypt()
            x = input("请选择模式(1.加密 2.解密 3.退出):")
        elif x == "2":
            decrypt()
            x = input("请选择模式(1.加密 2.解密 3.退出):")
        elif x == "3":
            break
        else:
            break

if __name__ == '__main__':
    main()

置换密码:文章来源地址https://www.toymoban.com/news/detail-738520.html

#调用的包
from copy import deepcopy

# 处理密钥获取密钥的长度及顺序
def processSecretKey(s):
    sLength = len(s)
    tempList = []
    for i in range(len(s)):
        char = s[i]
        # tempList存入密钥单词中字母的ascii码值
        tempList.append(ord(char))
    # tempList2用于存储密钥单词每个字母在列表的顺序
    sKey = []
    # sort_tempList用于存储排序后的tempList
    sort_tempList = sorted(tempList)
    for index_,value in enumerate(tempList):
        sKey.append(sort_tempList.index(value)+1)

    return sKey,sLength

# 加密
def encrypt():
    print("-------------加密过程-------------")
    text = input("请输入明文:")
    s = str(input("请输入秘钥:"))
    # 除去明文中的空格
    tempList = text.split(" ")
    newText = "".join(tempList)
    # 获取处理后明文的长度
    textLength = len(newText)
    # print("text:",newText)
    # 获取密钥及密钥长度
    sKey,sLength = processSecretKey(s)
    # print(f"sLength:{sLength}")
    # print(f"sKey:{sKey}")

    # 对于长度不够处理后的明文进行补A处理
    while textLength % sLength != 0:
        newText+="X"
        textLength = textLength + 1

    # 更新处理后明文的长度
    textLength = len(newText)
    # print(f"textLength:{textLength}")

    # 根据密钥的长度对明文进行分割
    counter = 1
    temp = []
    tmp = []
    for item_ in newText:
        if  (counter % (sLength) != 0):
            tmp.append(item_)
            counter+=1

        elif  (counter % (sLength) == 0):
            tmp.append(item_)
            temp.append(tmp)
            tmp=[]
            counter+=1

    print("明文矩阵为:")

    # 根据密钥对明文进行移位
    for item_ in temp:
        print(item_)
        item_copy = deepcopy(item_)
        # print("加密前:",item_)
        for i in range(len(item_)):
            item_[i] = item_copy[sKey[i]-1]
        # print("加密后:",item_)

    # 对移位后的明文进行拼接形成密文
    print("加密后的密文矩阵为:")
    string = ''
    for item_ in temp:
        print(item_)
        string+="".join(item_)
    print("加密后的结果为:", string)
    print("--------------------------------")


# 解密
def decrypt():
    print("-------------解密过程-------------")
    text = input("请输入密文:")
    s = str(input("请输入秘钥:"))
    # 获取密钥及密钥长度
    sKey, sLength = processSecretKey(s)
    # print(f"sLength:{sLength}")
    # print(f"sKey:{sKey}")

    # 根据密钥的长度对密文进行分割
    newText = text
    counter = 1
    temp = []
    tmp = []
    for item_ in newText:
        if (counter % (sLength) != 0):
            tmp.append(item_)
            counter += 1

        elif (counter % (sLength) == 0):
            tmp.append(item_)
            temp.append(tmp)
            tmp = []
            counter += 1
    # print(temp)

    print("密文矩阵为:")
    # 根据密钥对密文进行移位复原
    for item_ in temp:
        print(item_)
        item_copy = deepcopy(item_)
        # print("解密前:",item_)
        for i in range(len(item_)):
            item_[sKey[i] - 1] = item_copy[i]
        # print("解密后:",item_)

    # 对移位复原后的密文进行拼接形成明文
    print("解密后的明文矩阵为:")
    string = ''
    for item_ in temp:
        print(item_)
        string += "".join(item_)
    #  除去尾部可能出现的X
    string.strip("X")
    print("解密后的结果为:", string)
    print("--------------------------------")


def main():
    x = input("请选择模式(1.加密 2.解密 3.退出):")
    while True:
        if x == "1":
            encrypt()
            x = input("请选择模式(1.加密 2.解密 3.退出):")
        elif x == "2":
            decrypt()
            x = input("请选择模式(1.加密 2.解密 3.退出):")
        elif x == "3":
            break
        else:
            break

if __name__ == '__main__':
    main()

到了这里,关于古典密码算法实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 密码学基本原理和发展——古典密码学

      目录 1 滚筒密码 2 棋盘密码 3 凯撒密码 4 单表代换与多表代换 4.1 单表代换 4.2 多表代换         密码技术最早起源于公元前404年的希腊,此后密码大致经历了 古典密码、近代密码和现代密码三个阶段。         古典密码(公元前五世纪~19世纪末)代表性的是 滚桶密

    2024年02月05日
    浏览(50)
  • 密码学——古典密码中的基本加密运算附简单例题

    本篇文章将对古典密码中使用到的基本加解密运算进行总结,并展示个别加减密运算的简单例题,从而使读者更加容易理解古典密码中的基本加减密运算的原理。 首先引入密码学中的几个基本定义: M:明文空间,明文的集合 C:密文空间,密文的集合 K:密钥空间(也称密钥

    2024年02月12日
    浏览(75)
  • 现代密码学实验五:签名算法

    一、实验目的 1.掌握数字签名的基本原理,理解RSA算法如何提供数字签名。 2.熟悉实验环境和加密软件CrypTool 1.4(CrypTool 2)的使用。 3.编写代码实现签名算法。 二、实验内容 运行CrypTool 1.4(CrypTool 2),使用 RSA 算法对消息进行签名操作,选择公钥PK=(e,N),私钥为sk=(d,N)。例如: 消息

    2024年02月02日
    浏览(49)
  • 信息安全复习六:公开密钥密码学

    1.公开密钥密码模型的基本原理 2.两个算法:RSAD-H算法 主要内容 1.对称密钥密码的密钥交换问题 2.公钥密码模型的提出 3.设计公钥密码的基本要求 4.数字签名 5.RSA算法 6.公钥密码的特征总结 1.对称加密是什么 :对称加密是指加密和解密用的是同一个密钥的加密方式。 2.对称加

    2023年04月25日
    浏览(51)
  • 从密码学了解如何确定物联网信息安全

    编码学和分析学的关系:相互对立、相互依存、相互促进 1.第一阶段:几千年前到1949年,此时还没有形成一门科学,靠密码分析者的直觉和经验来进行 代表:Caesar密码、Playfair密码 2.第二阶段:1949年到1975年,正式成为了一门学科 3.第三阶段:1976年至今,形成了密码体系 1

    2024年02月11日
    浏览(37)
  • 【密码学】量子安全的密码学算法以及原理介绍

    (1)“代数格密码套件”(CRYSTALS)包含两个密码原语Kyber和Dilithium。Kyber是一种抗适应性选择密文攻击(IND-CCA2)安全密钥封装机制,Dilithium是一种高度不可伪造性(EUF-CMA)安全数字签名算法。两种密码都是为了应对量子计算机的攻击,并且在操作过程中只需更改几个参数即

    2024年02月11日
    浏览(59)
  • 现代密码学第二次实验:分组加密算法DES及其工作模式

    为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! 1、掌握DES算法的工作原理。 2、熟悉分组加密算法的4种工作模式(OFB模式可不做)。 3、了解DES的雪

    2024年02月06日
    浏览(60)
  • 【网络安全】【密码学】【北京航空航天大学】实验三、数论基础(下)【C语言实现】

    1、中国剩余定理(Chinese Remainder Theorem) (1)、算法原理 m1 , m2 , … mk 是一组 两两互素 的正整数,且 M = m1 · m2 · … · mk 为它们的乘积, 则如下的同余方程组: x == a1 (mod m1) x == a2 (mod m2) … x == ak (mod mk) 对于 模M 有唯一的解 x = (M · e1 · a1 / m1 + M · e2 · a2 / m2 + … + M · ek ·

    2024年02月02日
    浏览(47)
  • 【网络与信息安全学报】区块链密码学隐私保护技术综述——CCF T2

    区块链密码学隐私保护技术综述 Survey on blockchain privacy protection techniques in cryptography Abstract 近年来,数据隐私问题日益明显,如何在区块链中实现有效的隐私保护是研究热点。针对区块链在隐私保护上的研究现状与发展态势,阐述了区块链在交易地址、预言机以及智能合约上

    2024年02月03日
    浏览(60)
  • 【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

    1、通过本次实验,熟悉相关的编程环境,为后续的实验做好铺垫; 2、回顾数论学科中的重要基本算法,并加深对其的理解,为本学期密码学理论及实验课程打下良好的基础。 数论主要研究的是整数的运算及性质,许多常用的加密算法都用到了数论知识。 本次实验的实验环

    2024年01月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包