注: 1. 采用了return ,可以去掉ret, += 的语句改为print
2. 无介绍,各种密码的介绍请自行百度
3. 仅是一种实现,不一定最优

1. 凯撒密码

加密

def caesar_en(s, n):ret = ''for i in s:if i.isalpha():if i.islower():ret += chr(97+(ord(i)-97+n)%26)else:ret += chr(65+(ord(i)-65+n)%26)else:ret += iprint(ret)return ret

解密+“爆破”(这个写复杂了,见到的例子都是只处理字母的,,,)

def caesar_de(s, n="/", alp=True):"""凯撒密码 解密alp 表示是否只处理字母默认只处理字母,n从0试到25"""ret = ""s = str(s)n = str(n)if n.isdigit():  # 如果指定nn = int(n)if alp:  # and not s.isalpha():for i in s:if not i.isalpha():ret += ielse:if i.islower():ret += chr(97+(ord(i)-97-n)%26)else:ret += chr(65+(ord(i)-65+n)%26)# elif alp:#    for i in s:#        if i.islower():#            ret += chr(97+(ord(i)-97+n)%26)#        else:#          ret += chr(65+(ord(i)-65+n)%26)else:for i in s:ret += chr(ord(i)+n)print(repr(ret))elif '/' in n:  # 否则范围求解if n == "/":if alp:start, end = 0, 25else:start, end = -26, 26elif n[0] == "/":if alp:start = 0else:start = -26end = int(n[1:])elif n[-1] == "/":start = int(n[:-1])if alp:end = 25else:end = 26else:start, end = [int(i) for i in n.split("/")]ret = []for n in range(start, end+1):print("偏移量%3d"%n, end=": ")retp = ""if alp:  # and not s.isalpha():for i in s:if not i.isalpha():retp += ielse:if i.islower():retp += chr(97+(ord(i)-97-n)%26)else:retp += chr(65+(ord(i)-65-n)%26)# elif alp:#   for i in s:#        if i.islower():#            retp += chr(97+(ord(i)-97+n)%26)#       else:#          retp += chr(65+(ord(i)-65+n)%26)else:for i in s:retp += chr(ord(i)+n)print(repr(retp))  # repr 为了将不可见字符输出ret.append(retp)else:print("invalued n")return ret
2. 摩斯密码

加密

def morse_en(s, sh=".", lo="-", sign="/"):"""摩斯密码 加密"""codes = {'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': '----.','?': '..--..', '/': '-..-.', '.': '.-.-.-', '@': '.--.-.','-': '-....-', '(': '-.--.', ')': '-.--.-', ':': '---...', ',': '--..--', ';': '-.-.-.', '=': '-...-', "'": '.----.', '"': '.-..-.', '_': '..--.-','!': '-.-.--', '$': '...-..-'}s = s.lower().replace(' ', '')ret = []err = Falsefor ch in s:if ch in codes:ret.append(codes[ch])else:ret.append(ch)err = Trueret = sign.join(ret).replace(".",sh).replace("-",lo)print(ret)if err:print("注意:有不能识别字符(原样输出在结果中)")return ret

解密

def morse_de(s, sh=".", lo="-", sign="/"):"""摩斯密码 解密"""codes = {'.-': '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', '..--..': '?', '-..-.': '/', '.-.-.-': '.', '.--.-.': '@', '-....-': '-', '-.--.': '(', '-.--.-': ')', '---...': ':', '--..--': ',', '-.-.-.': ';', '-...-': '=', '.----.': "'", '.-..-.': '"', '..--.-': '_','-.-.--': '!', '...-..-': '$'}if not s:print()return ""s = s.split(sign)ret = ""err = []for i in s:if i in codes:ret += codes[i]else:err.append(i)print(ret)if err:print("不能识别的摩斯密码:")print("/".join(err))return ret
3. 栅栏密码

加密

def fence_en(s, n):"""栅栏密码 加密"""s = s.replace(" ", '')  # 去除空格ret = "".join([s[i::n] for i in range(n)])print(ret)return ret

解密+“爆破”

def fence_de(s, n=0):"""栅栏密码 解密"""ret = ""l = len(s)if n:  # 若指定n则按指定的r = l%nd = l//nfor i in range(d):for j in range(n):ret += s[j*(d+1)+i if j<r else r*(d+1)+(j-r)*d+i]for j in range(r):ret += s[j*(d+1)+d]print(ret)return ret# 否则遍历破解ret = []for n in range(2, len(s)):  # 一般都会在2到len(s)/2里找到结果,这里全输出一下retp = ""r = l%nd = l//nprint("%sn=%2d"%('*'*(r == 0), n), end=": ")for i in range(d):for j in range(n):retp += s[j*(d+1)+i if j<r else r*(d+1)+(j-r)*d+i]for j in range(r):retp += s[j*(d+1)+d]ret.append(retp)print(retp)return ret
4. 埃特巴什码
def atbash(s):"""埃特巴什码 加密==解密"""codes = {'a': 'z', 'b': 'y', 'c': 'x', 'd': 'w', 'e': 'v', 'f': 'u', 'g': 't', 'h': 's', 'i': 'r', 'j': 'q', 'k': 'p', 'l': 'o', 'm': 'n', 'n': 'm', 'o': 'l', 'p': 'k', 'q': 'j', 'r': 'i', 's': 'h', 't': 'g', 'u': 'f', 'v': 'e', 'w': 'd', 'x': 'c', 'y': 'b', 'z': 'a', 'A': 'Z', 'B': 'Y', 'C': 'X', 'D': 'W', 'E': 'V', 'F': 'U', 'G': 'T', 'H': 'S', 'I': 'R', 'J': 'Q', 'K': 'P', 'L': 'O', 'M': 'N', 'N': 'M', 'O': 'L', 'P': 'K', 'Q': 'J', 'R': 'I', 'S': 'H', 'T': 'G', 'U': 'F', 'V': 'E', 'W': 'D', 'X': 'C', 'Y': 'B', 'Z': 'A'}ret = ""for i in s:if i in codes:ret += codes[i]else:ret += iprint(ret)return ret
5. 元音密码

加密

def vowel_en(s, mode=0, sign="."):"""元音密码 加密"""if mode != 0 and mode != 1:print("仅有模式0和1")returns = s.upper()codes = [{'A': '10', 'B': '11', 'C': '12', 'D': '13', 'E': '20', 'F': '21', 'G': '22', 'H': '23', 'I': '30', 'J': '31', 'K': '32', 'L': '33', 'M': '34', 'N': '35', 'O': '40', 'P': '41', 'Q': '42', 'R': '43', 'S': '44', 'T': '45', 'U': '50', 'V': '51', 'W': '52', 'X': '53', 'Y': '54', 'Z': '55'},{'A': '1', 'B': '11', 'C': '12', 'D': '13', 'E': '2', 'F': '21', 'G': '22', 'H': '23', 'I': '3', 'J': '31', 'K': '32', 'L': '33', 'M': '34', 'N': '35', 'O': '4', 'P': '41', 'Q': '42', 'R': '43', 'S': '44', 'T': '45', 'U': '5', 'V': '51', 'W': '52', 'X': '53', 'Y': '54', 'Z': '55'}]ret = []err = Falsefor i in s:if i in codes[0]:ret.append(codes[mode][i])else:err = Trueret.append(i)if mode == 0:ret = "".join(ret)else:ret = sign.join(ret)print(ret)if err:print("有错误!")return ret

解密

def cut(o, s):return [o[i:i+s] for i in range(0,len(o),s)]def vowel_de(s, mode=0, sign="."):"""元音密码 解密"""codes = {'1': 'A', '10': 'A', '11': 'B', '12': 'C', '13': 'D', '2': 'E', '20': 'E','21': 'F', '22': 'G', '23': 'H', '3': 'I', '30': 'I','31': 'J', '32': 'K', '33': 'L', '34': 'M', '35': 'N', '4': 'O', '40': 'O', '41': 'P', '42': 'Q', '43': 'R', '44': 'S', '45': 'T', '5': 'U', '50': 'U','51': 'V', '52': 'W', '53': 'X', '54': 'Y', '55': 'Z'}err = Falseret = ""if mode == 0:s = cut(s, 2)elif mode == 1:s = s.split(sign)else:print("仅有模式0和1")returnfor i in s:if i in codes:ret += codes[i]else:err = Trueret += iprint(ret)if err:print("有错误!")return ret
6. 维吉尼亚密码

加密

def virginia_en(s, k):"""维吉尼亚密码 加密s: 明文k: 密钥"""s = s.upper()k = k.upper()  # 也可以都转小写,注意把65一起改为97k = k*(len(s)//len(k)+1)ret = ""for i in range(len(s)):ret += chr((ord(s[i])+ord(k[i])-65*2)%26+65)print(ret)return ret

解密,只改了倒数第三行和函数名

def virginia_de(s, k):"""维吉尼亚密码 解密"""s = s.upper()k = k.upper()k = k*(len(s)//len(k)+1)ret = ""for i in range(len(s)):ret += chr(((ord(s[i])-65)-(ord(k[i])-65))%26 + 65)print(ret)return ret

凯撒/摩斯/栅栏/维吉尼亚/元音密码加解密的Python实现相关推荐

  1. Virginia(维吉尼亚)无密钥解密

    Virginia无密钥解密 加密 virginia加密是一种多表替换加密方法,通过这种方法,可以有效的解决单表替换中无法应对的字母频度攻击.这种加密方法最重要的就是选取合适的密钥,一旦密钥被公开,保密 ...

  2. 维吉尼亚密码通过字符频率爆破

    题目的密文如下: qy sdrgx bswkjlpuh zmntp rv wesokk qp fcabwz gqw rdi nlufaaehp rijmntp jjvwmej oqg etz jxmk ...

  3. 实验吧-密码学-杯酒人生(特殊凯撒--维吉尼亚密码)(凯撒加解密脚本、维吉尼亚密码加解密脚本)...

    题目: 使用古典密码 一喵星人要想喵星发送一段不知道干什么用的密码"BLOCKCIPHERDESIGNPRINCIPLE", 但是它忘记了密钥是什么, 手头(爪头)只有它自己加密过 ...

  4. python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)

    各位白嫖-漂亮大哥哥姐姐们好,在下菜鸡一枚,主要想在这和大家一起探讨学习之道,一起愉快的学习密码学基础.总所周知,密码学学的好,头发掉的少... 直接进入正题,今天我就主要讲三个密码,而且都是古典密码 ...

  5. Java实现凯撒密码、维吉尼亚密码、双换位密码、RC4算法加密

    文章目录 前言 一.凯撒密码 二.维吉尼亚密码 三.双换位密码 四.RC4算法加密 前言 本博文为信息安全与支付课程的课程作业. 一.凯撒密码 文件有:Caesar.java.输入文件input1.t ...

  6. 维吉尼亚密码 (原理+代码)

    目录 1.原理 2.流程图 3.编程实现 4.总结 1.原理         维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 1508年时, ...

  7. 密码学笔记——维吉尼亚密码

    维吉尼亚密码 一.简介 维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 二.加密算法 直接拿例子来说,比如我要加密一段明文        明文:THISISTO ...

  8. 维吉尼亚密码加密/解密在线工具

    维吉尼亚密码加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=856 维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移 ...

  9. 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)

    古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...

  10. 维吉尼亚密码及其破解

    凯撒密码 凯撒密码是一种简单的加密方法,即将文本中的每一个字符都位移相同的位置. 如选定位移3位: 原文:a b c 密文:d e f 由于出现了字母频度分析,凯撒密码变得很容易破解. "如 ...

最新文章

  1. iOS 项目中用到的一些开源库和第三方组件
  2. svn文件重进更改服务器路径,svn 设置 服务器路径
  3. Docker的今生前世,关于Docker的一些见解
  4. MySQL Connector/Net 5.20安装后无法在VS2008中正常使用的问题
  5. 安全验证框架使用笔记001---Shiro简介
  6. 火山引擎张鑫解读云原生2021:K8s 开先河、技能全栈、业务“无感”
  7. 我有一辆机器人小车,怎么让它跑起来,还会避障、目标跟踪、路径规划?
  8. 标签中包含input时line-height属性失效的解决办法
  9. Mapreduce和yarn-内存设置
  10. 如何将dwg文件转成kml文件
  11. 导入html文件到onenote,onenote怎么导入文件 onenote添加文件附件的图文步骤
  12. 打印机驱动安装及换色带
  13. linux服务器运维基础学习
  14. 2022最新7个开源Kubernetes(k8s)开发工具
  15. linux动态频率调节系统cpufreq,Linux的cpufreq(动态变频)技术
  16. 知识分享-博客公众号推荐
  17. Visio科学图形包免费下载
  18. html+css简单立体导航栏
  19. 行云管家堡垒机如何登录服务器
  20. Modbus的基础学习

热门文章

  1. 【Arc GIS 零基础教学】环境专业专题图层水系图的绘制方法
  2. Linux下使用服务器24小时不间断直播电影电视剧
  3. 四叶草黑苹果启动器:Clover EFI bootloader for Mac
  4. 四叶草启动linux黑屏,E1-471G,黑苹果10.11,Clover无法进入安装界面,直接黑屏重启...
  5. queryDSL复杂查询的分页和自定义排序实现
  6. 2022年6月深圳地区数据分析师认证(CPDA),进入了解
  7. 2.1 Hadoop环境搭建
  8. 免费sip虚拟服务器,VOIP服务器软件Sip服务器miniSIPServer
  9. 关于搭建测试环境(详细)
  10. 密码学 SM3算法 Python实现