CRYPTO古典密码学学习

  • 1.键盘密码加密
  • 2.Brain Fuck 和 Ook密码
  • 3.替代密码
    • 莫斯密码
    • 凯撒加密
      • rot13\color{olive}{rot13}rot13
    • 词频分析法 [^1]
    • 培根密码
    • 仿射加密
    • 猪圈密码
    • base家族
    • 维吉尼亚加密
    • 费纳姆加密
    • 杰斐逊加密
  • 4.置换加密
    • 栅栏加密
    • 列置换加密
    • 波利比奥斯(polybius)加密
    • ADFGX加密

1.键盘密码加密

(1)在键盘上进行查找比划,观察形状①------形状------②------圈起来------
(2)键盘坐标加密,法1.- - -以字母所在列为横坐标,数字行为纵坐标;法2- - - 数字行为横坐标,以字母所在列为纵坐标


2.Brain Fuck 和 Ook密码



Ook与bf在线解密


3.替代密码

莫斯密码

常用“/”或“ ” 分割,而有些在线编译器无法识别,其中莫斯码表包含少

  • 莫斯python脚本
import MorseMorseList = {".-": "A", "-...": "B", "-.-.": "C", "-..": "D", ".": "E", "..-.": "F", "--.": "G","....": "H", "..": "I", ".---": "J", "-.-": "K", ".-..": "L", "--": "M", "-.": "N","---": "O", ".--.": "P", "--.-": "Q", ".-.": "R", "...": "S", "-": "T","..-": "U", "...-": "V", ".--": "W", "-..-": "X", "-.--": "Y", "--..": "Z","-----": "0", ".----": "1", "..---": "2", "...--": "3", "....-": "4",".....": "5", "-....": "6", "--...": "7", "---..": "8", "----.": "9",".-.-.-": ".", "---...": ":", "--..--": ",", "-.-.-.": ";", "..--..": "?","-...-": "=", ".----.": "'", "-..-.": "/", "-.-.--": "!", "-....-": "-","..--.-": "_", ".-..-.": '"', "-.--.": "(", "-.--.-": ")", "...-..-": "$",". ...": "&", ".--.-.": "@", ".-.-.": "+","----.--": "{","-----.-": "}"
}def morse(string, sign):# 分割,字符串string,分割标识符signlists = string.split(sign)for code in lists:print(MorseList.get(code), end="")
#get(code)后可加.lower()
if __name__ == "__main__":Morse.morse("..-. .-.. .- --.", " ")

凯撒加密

  • 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。
  • 加密,解密方法
  • 凯撒python脚本
'''加密
a=int(input('请输入密钥:'))
s=input('请输入字符串')
print(''.join([chr((ord(i)-97+a)%26+97) for i in s]))
'''
#解密
txt = input('请输入密文').strip()
n = input('是否需要推荐(Y/N)').strip()
for i in range(1,26):plain=''for j in txt:if j.islower():plain = plain + chr(97+(ord(j)-i-97)%26)elif j.isupper():plain = plain + chr(65+(ord(j)-i-65)%26)else:plain = plain + jif n.lower() == 'y':key = ('flag','ctf','key')for m in key:if m in plain:print('明文可能是:',plain)print()breakelif n.lower() == 'n':print(plain,end='')print()

rot13\color{olive}{rot13}rot13

  • rot13其实为特殊的凯撒加密,其凯撒密钥为13,也称回旋加密,密文与原文交替13

词频分析法 1

特点:密文很长


培根密码


有可能是大写算a或b的一种,小写为另一种
也可能是文字的粗细关系

  • 培根密码python脚本
#培根24
a = ["AAAAA", "AAAAB", "AAABA", "AAABB", "AABAA", "AABAB","AABBA", "AABBB", "ABAAA", "ABAAB", "ABABA", "ABABB","ABBAA", "ABBAB", "ABBBA", "ABBBB", "BAAAA", "BAAAB","BAABA", "BAABB", "BABAA", "BABAB", "BABBA", "BABBB",
]
b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', '(ij)', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', '(uv)', 'w', 'x', 'y', 'z']
key = dict(zip(a,b))
txt = input('请输入密文:').replace(' ','').upper()
for i in range(0,len(txt),5):print(key.get(txt[i:i+5]),end='')#培根26
a = ["aaaaa", "aaaab", "aaaba", "aaabb", "aabaa", "aabab", "aabba","aabbb", "abaaa", "abaab", "ababa", "ababb", "abbaa", "abbab","abbba", "abbbb", "baaaa", "baaab", "baaba", "baabb","babaa", "babab", "babba", "babbb", "bbaaa", "bbaab",
]
b = 'abcdefghijklmnopqrstuvwxyz'
key = dict(zip(a,b))
txt = input('请输入密文:').replace(' ','').lower()
for i in range(0,len(txt),5):print(key.get(txt[i:i+5]),end='')

仿射加密


解密公式:x = a -1(y - b) % 26

  • 仿射(affine)解密python脚本(下面这位大佬更全面点)
    https://blog.csdn.net/qq_43531895/article/details/106316161
#求乘法逆元
#y = (ax + b)%26,其中y为密文
#(a*m)%26 = 1,m为乘法逆元txt = input('请输入密文:')
a = int(input('输入a的值:'))
b = int(input('输入b的值:'))
def get_inverse(a):for i in range(1,27):if a*i%26==1:return i
def decipher(a, b, c):a_inv = get_inverse(a)p=[]for i in c:temp=(((ord(i)-97)-b)*a_inv)%26+97p.append(chr(temp))print(''.join(p))#暴力破解
for i in txt:for j in range(0,26):if (a*j+b)%26 == ord(i)-97:#小写97,大写65print(chr(j+97),end='')

猪圈密码


猪圈密码在线解密


base家族

  • 16 是 0 - 9 和 A - F
  • 32 是大写英文加 1 - 7
  • 64 是大小写加 0 - 9 加 / +
    base全家桶进入base家族
#base64
import base64
txt = input('请输入密文:')
key = ''
for i in txt:key = key + chr(ord(i)-4)
print(key)

维吉尼亚加密

  • 采用多表替换
  • 密钥:比较短的英文字母
  • 维吉尼亚python脚本
txt = input('请输入密文:')
passward = input('请输入密钥:').lower()
key = [ord(i)-97 for i in passward]
flag = ''
for i in range(len(txt)):if txt[i].islower():flag += chr(97 + (ord(txt[i]) - 97 - key[i % len(key)]) % 26)if txt[i].isupper():flag += chr(65 + (ord(txt[i]) - 65 - key[i % len(key)]) % 26)
print(flag)

费纳姆加密


简称:七位一体转ASCII

  • 费纳姆python脚本
txt = input('请输入密文:')
key = input('请输入密钥:')
mi = []
for i in range(0,len(txt),7):mi.append(txt[i:i+7])for m,n in zip(mi,key):print(chr(int(m,2) ^ ord(n)),end='')

杰斐逊加密

  • 杰斐逊python脚本
#txt 为密文可以更换
txt = ['ZWAXJGDLUBVIQHKYPNTCRMOSFE','KPBELNACZDTRXMJQOYHGVSFUWI','BDMAIZVRNSJUWFHTEQGYXPLOCK','RPLNDVHGFCUKTEBSXQYIZMJWAO','IHFRLABEUOTSGJVDKCPMNZQWXY','AMKGHIWPNYCJBFZDRUSLOQXVET','GWTHSPYBXIZULVKMRAFDCEONJQ','NOZUTWDCVRJLXKISEFAPMYGHBQ','QWATDSRFHENYVUBMCOIKZGJXPL','WABMCXPLTDSRJQZGOIKFHENYVU','XPLTDAOIKFZGHENYSRUBMCQWVJ','TDSWAYXPLVUBOIKZGJRFHENMCQ','BMCSRFHLTDENQWAOXPYVUIKZGJ','XPHKZGJTDSENYVUBMLAOIRFCQW']
mi = 'HCBTSXWCRQGLES'
key = '2,5,1,3,6,4,9,7,8,14,10,13,11,12'
key = key.split(',')
#print(key)  ['2', '5', '1', '3', '6', '4', '9', '7', '8', '14', '10', '13', '11', '12']
key = [int(i) for i in key]
#print(key)  [2, 5, 1, 3, 6, 4, 9, 7, 8, 14, 10, 13, 11, 12]
flag = []
for m,n in zip(key,mi):#[txt[m-1].index(n):]切片flag.append(txt[m-1][txt[m-1].index(n):] + txt[m-1][:txt[m-1].index(n)])
for i in range(26):for j in flag:print(j[i],end='')print()

4.置换加密

栅栏加密

  • 栅栏加密是将明文分成 n 个一组,然后把每个字符第一个字符连接起来,第二个……组成一个新的无规律字符
  • 栅栏python脚本
def zhalan(txt,key):s = ''for m in range(key):for n in range(m,len(txt),key):s = s + txt[n]return s
if __name__ == '__main__':txt = input('请输入密文:')key = []for i in range(2,len(txt)):if len(txt)%i == 0:key.append(i)for j in key:flag = zhalan(txt,j)print(f'{j}栏:{flag}')

列置换加密



波利比奥斯(polybius)加密

又称棋盘加密,将给定的明文加密为两两组合的数字

  • 明文:HELLO
  • 密文:23 15 31 31 34

ADFGX加密

可以看作是 polybius 升级版,
其密码用A D F G X 代替了上述5个数字
明文:HELLO
密文:AD DA XX XX DX


赠CTF密码学离线工具
成功解压之后,点击 .bat\color{RED}{.bat}.bat 文件即可
CTFcracktools
提取码:qb4f


  1. 需要词频分析离线软件的点击windecryptosetup
    提取码:anto ↩︎

CRYPTO古典密码学学习相关推荐

  1. 密码学-古典密码学习笔记

    文章目录 参考资料 替代技术 单字母表替代密码 凯撒密码 移位密码 仿射密码 针对单字母表替代密码的攻击 多字母表替代密码 Vigenere密码 Hill密码(希尔密码) 置换技术 置换密码的定义 案 ...

  2. 从入门到前沿的密码学学习路线

    为了做大数据安全的研究工作, 必须先把密码学基础知识补齐, 于是有了这篇依据Journal of WoCrypt第四期总结的(公钥)密码学学习路线 原文链接 1 引言 刚开始进入一个领域时,入门材料的 ...

  3. 隐私计算及密码学学习记录

    隐私计算 隐私计算(Privacy compute)是指在保护数据本身不对外泄露的前提下实现数据分析计算的技术集合. 与传统数据使用方式相比,隐私计算的加密机制能够增强对于数据的保护.降低数据泄露风险 ...

  4. 密码学原理-篇1:古典密码学

    密码学原理-篇1:古典密码学 关键词: 恺撒密码 单表替换密码 多表替换密码 重合指数 古典密码学之所以被称为古典,是因为区别于现代密码学,这些密码理论虽然很有价值,但是现在很少使用.因此,学习古典密 ...

  5. 古典密码学原理和Base64算法原理

    密码学,就是研究如何将一个内容(可以是字符串.文件.二进制流)通过一系列算法转换成另一种内容的学科.从广义上来看,有一个算法可以将字符串转换成另一个字符串即可,即该算法可逆不可逆都可以:从狭义上来看, ...

  6. 模运算——开启密码学学习之路

    模运算--开启密码学学习之路 综述:学完高数,线性代数,概率论,数学已经学了一大半,本以为数学的知识也就到此结束,但没有想到这只是自己自欺欺人.开始看导师密码学的论文的时候,第一眼就吓傻眼,模运算mo ...

  7. 信息安全导论 实验一 古典密码学

    一.实验目的与原理 1.实现古典密码学中的移位密码算法和维吉尼亚算法. 2.了解两种算法的原理,并且编写出来. 3.使用语言为C++或者Python等. 二.实验内容与记录 位移密码算法: 移位密码算 ...

  8. 计算机密码学学习笔记(二)——Shannon理论

    话说之前第一篇古典密码学写的那么认真怎么都没人看的,失去动力了... 但是我还是要更,本期主题Shannon理论.个人水平有限,如有错误,不吝指正. 一.描述密码体制安全性的准则 计算安全性 这种度量 ...

  9. 古典密码学、DES对称加密、3DES对称加密知识总结和实验

    实验三.古典密码学.DES对称加密.3DES对称加密 一.古典密码学:当铺密码.培根密码.摩斯密码.键盘密码.与佛论禅 1.当铺密码: 解密"由人俱一口中"和"大中口由人 ...

最新文章

  1. linux 使用sendmail发送邮件
  2. 概要设计实例_多核片上系统(SoC)架构的嵌入式DSP软件设计
  3. Spring+Quartz 集群
  4. 设计延迟加载的“单例设计模式”
  5. 逻辑综合——施加约束
  6. windows路由表 重启后就还原了_绕过Apple id并可以随意重启的终极方案来了 (Windows下操作)...
  7. Java JVM 汇编代码入门 GitChat链接
  8. 攻防世界web新手区解题 /cookie / disabled_button / weak_auth
  9. ELF文件的签名与验证
  10. python3发送微信
  11. 位于地下88米,一晚6000块,上海这家酒店房间内竟还有玄机!
  12. SQL Server 实现递归获取层级数据
  13. ubuntu16.04安装pycharm,并设置快捷启动方式
  14. 03-字典的增删改查
  15. Qt三方库开发技术:Qt应用内部打开PDF文件
  16. Sitemap和网站地图在线生成工具
  17. MATLAB之方程组求解(八)
  18. 社团联合会计算机教程,计算机与信息工程学院学生社团联合会
  19. 绍耕反失败学课程(06)——在正确时间做正确的事情,轻装上阵抛弃负担
  20. c++超级简单的计算器

热门文章

  1. 2022云南最新八大员之(安全员)模拟考试试题及答案
  2. MySQL:锁机制 |表级锁、行级锁 | 排它锁、共享锁 | 间隙锁
  3. VSCode背景图片修改
  4. ch340 linux调试乱码,关于新百魔和m101 ttl串口乱码问题解决
  5. 完美刷机显示云服务器,完美刷机正在云服务器
  6. 实现展馆灯光控制系统 单片机 MSP430 F5529
  7. python 调用百度智能写诗
  8. Python实现双色球和大乐透摇奖
  9. No module named 'skimage'解决办法
  10. vue 微信公众号支付接口_vue页面在微信公众号调用支付接口