2020-12-30

加密算法(一):30行代码破解凯撒加密

密码学的英语单词是 Cryptograghy,由希腊单词 Kryptos(隐藏)和 Graphin (写)派生出来,最初代表的意思是用来隐秘的传递信息。

以时间划分,1976年以前的密码算法都属于 古典密码学,古典密码学现在已经很少采用了,然而,研究古典密码的原理对于理解构造和分析现代密码都是十分有益的。古典密码学中最经典的两种算法如下:

  • 替代法

    系统地将一组字母换成其他字母或符号,例如 fly 变成 gmz (每个字母用下一个字母取代)

  • 移位法

    将字母顺序重新排列,例如 help 变成 ehpl

凯撒密码

凯撒密码(Caesar cipher)是最经典的替代法,据传由古罗马帝国的皇帝凯撒所发明,用在与远方将领的通讯上,每个字母被往后位移三格字母所替代

在这里插入图片描述

如果信息需要保密,信中便使用暗号,也即是改变字母顺序,使用字母 D 代替 A,以此类推,使局外人无法组成一个单词。

不过,使用多次使用凯撒密码来加密并不能获得更大的安全性,因为使用偏移量 A 加密得到的结果再用偏移量 B 加密,等同于使用 A+B 的偏移量进行加密的结果

Python 实现凯撒密码

def encrypt_text(origin, key=3):
    """
    @origin: 初始字符串
    @key: 字母位移次数
    """
    result_text = ''
    for char in origin:
        ascii_code = ord(char)+key  # 获取字符的ASCII码并移动指定位数
        result_text += chr(ascii_code)  # 将移动后的ASCII码转换至字符并拼接
    return result_text

# 初始需要加密的字符串
origin_text = ‘Python is powerful… and fast,plays well with others, runs everywhere,is friendly and easy to learn,is Open.’

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

指定偏移量为 3,加密原文:

origin_en = encrypt_text(origin_text, 3)

#S|wkrq#lv#srzhuixo111#dqg#idvw/sod|v#zhoo#zlwk#rwkhuv/#uxqv#hyhu|zkhuh/lv#iulhqgo|#dqg#hdv|#wr#ohduq/lv#Rshq1

  • 1
  • 2
  • 3

指定偏移量为 -3,解密数据

origin_de = encrypt_text(origin_en, -3)

# Python is powerful… and fast,plays well with others, runs everywhere,is friendly and easy to learn,is Open.

  • 1
  • 2
  • 3

破解凯撒密码

由于使用凯撒密码进行加密的语言一般都是字母文字系统,因此密码中可能使用的偏移量也是有限的。例如使用 26 个字母的英语,它的偏移量最多就是 25(偏移量 26 等同于偏移量 0;偏移量超过 26,等同于偏移量 1-25),因此可以通过穷举法,轻易地进行破解。

另一种方法是通过频率分析,当密文长度足够大的情况下,可以先分析密文中每个字母出现的频率,然后将这一频率与正常情况下的该语言字母表中所有字母出现的频率作比较。例如在英语中,正常明文中字母 e 和 t 出现的频率特别高。通过这一特点,分析密文字母出现的频率,可以估计出正确的偏移量。

但是频率分析也有其局限性,它对于故意省略元音字母或者其他缩写方式写成的明文加密出来的密文并不适用。

使用 Python 实现破解过程

import random

def encrypt_text(origin, key=3):
“”"
@origin: 初始字符串
@key: 字母位移次数
“”"

result_text = ‘’
for char in origin:
ascii_code = ord(char)+key # 获取字符的ASCII码并移动指定位数
result_text += chr(ascii_code) # 将移动后的ASCII码转换至字符并拼接
return result_text

def decrypt_text(text):
# 1. 统计密文中字符的出现次数
dct = { }
for char in text:
dct[char] = dct.get(char, 0) + 1

# 2. 对字典排序
dct = dict(sorted(dct.items(), key=lambda x: x[1], reverse=True))

# 3. 取出出现次数最多的7个元素, 得出与字母 e 的偏移量
for item in list(dct)[:7]:
    key = ord('e') - ord(item)
    pred_text = encrypt_text(text, key)
    print(f'偏移量 = {key}:')
    print("\t"+pred_text)

# 初始需要加密的字符串
origin_text = ‘Python is powerful… and fast,plays well with others, runs everywhere,is friendly and easy to learn,is Open.’
# 随机指定偏移量
en_text = encrypt_text(origin_text, random.randint(1, 20))

# 开始解密
decrypt_text(en_text)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

结果如下:

在这里插入图片描述

Java并发编程精讲
09-28
课程会讲解Java中并发相关技术的基础、原理和应用,从线程安全、线程(池), 锁实现和并发容器等高并发Java实现,去深入理解在并发编程中, 一些最容易被忽视的点,这些点也是我在多年编程经验中实际用到, 对于每个小节小课均会有实际的场景应用为你呈现。 同时这些也是面试过程中面试官考察的重点,掌握这些点,面试和工作时,做到心中有货,不慌不乱,能够胜任。
2020Java后端开发面试题总结(春招+秋招+社招)
程序媛小琬的博客
12-27 1万+
前言

今天给大家分享一些Java面试中频繁被问到的一些面试题吧,在写之前先给大家说一声:冬至快樂,大家一定记得吃饺子喔~

文章目录
Java基础——基础知识
Java基础——集合框架/泛型/容器
Java基础——多线程
Java基础——框架基础:注解/反射/流行框架
Java基础——面向对象:继承/多态/封装
Java基础——设计模式
Java基础——JVM/类加载
Java基础——I/O
网络编程和计网
数据库
操作系统
数据结构
Java基础—基础知识
一、 九种基本数据类型的大小,以及他们的封装类


  • <
  • 1
  • 2
  • >
基于IP多播的网络会议程序
01-13
采用Visual C++实现局域网IP多播,设计的一个图形界面网络会议程序,仅实现文本多播
Mysql数据库基础入门视频教程
10-24
Mysql数据库基础入门视频课程:属于零基础Mysql数据库教程,从数据库的基本专业术语介绍到数据库软件的下载使用 一步一步带你安装MySql。SQL阶段你将学会如果使用数据定义语言DDL,数据操作语言DML,数据查询语言DQL 在学会各中查询语句之后,会带你学习数据的完整性, 掌握如果正确的向数据库中添加数据 以上掌握技能之后,将会带你学习如何进行多表操作,关系的建立,各种连接查询等. 常用函数,事务的学习,您将学到什么是事务的提交,回滚,并发操作及脏读,幻读. 最后视图,存储过程,索引的学习,将会带你掌握更高级的数据库技术.
加密解密之 凯撒密码_孔祥月的博客
12-24
暴力 破解:穷举法,将所有可能性都列举出来 明文暗文 明文:原始信息 密文:经过 加密算法混淆后的信息 凯撒密码介绍 凯撒密码作为一种最为古老的 加密技术,在古罗马的时...
凯撒密码(Caesar) 加密解密算法C/C++实现_任成风的博客
12-25
要实现 凯撒密码(Caesar) 加密算法,我们只需要写一段 代码或者更为准确的说写一个函数实现上面的 加密公式就好。 实际上写 代码的过程中,我们比较容易出错的是模运算的实...
python入门
12-18
您观看课程学习后

免费入群领取【超全Python资料包+17本学习电子书】

帮助与数百万年轻人打开人工智能的学习大门!
大学生网页设计大作业-5个网页设计制作作品自己任选
12-23
大学生网页设计大作业-以下5个网页设计制作作品自己任选: 1.网页制作基础大二dw作业 2.web网页大作业 3.大学生期末网页大作业-6页面的网页设计,是个人主页类型。包含了6个页面,包含视频、脚本
凯撒密码的 加密解密算法实现_好人寥寥的博客
12-18
用C++实现 凯撒密码的 加密解密算法 在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒 加密、恺撒变换、变换 加密,是一种最简单且最广为人知的 加密技术。
JAVA 加密解密之 凯撒 加密(Caesar cipher)算法_蒋固金(ji...
12-27
凯撒 加密算法简介 凯撒 加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k。举个例子如果k等于3,则在编码后的消息中,每个字...
2020新版C语言程序设计零基础入门小白自学编程
03-11
		自学零基础入门新版C语言视频教程是2020年2月录制,分为14章72集
	






【基础知识点】


   讲解C语言的发展史和C语言的快速启蒙


   快速搭建C语言开发环境和手把手教你编写第一个程序


   详细讲解C语言基础语法和多种常用数据类型


   深入理解C语言算术,关系,逻辑,位等复杂运算符


   代码实战C语言三大控制流,顺序,选择,循环结构


   手把手讲解C语言一维、二维数组的区别与用法




【中级知识点】


   深入解读字符串的长度、复制、链接、比较等方法


   结合例子手把手教你函数的定义、使用、递归等知识


   面试必备知识点指针的深入解读,从此面对指针不再陌生


   全面讲解指针数组、数组指针、指针变量、指针的指针等难点


   掌握C语言共用体、枚举、结构体、链表等数据类型的使用


   深入浅出C语言编译预处理、理解宏、包含文件、条件编译等


   玩转C语言文件操作之文件的打开关闭、删除、读写




【综合项目实战-学生管理系统】


代码实战学生管理系统的管理界面


代码实战学生管理系统录入学员信息


代码实战学生管理系统查询学员信息


代码实战学生管理系统显示学员信息


      代码实战学生管理系统删除学员信息

      代码实战学生管理系统修改学员信息

HTML5+CSS3 精美登陆界面源码
01-19
3个很精美的登陆界面,全都是用HTML5+CSS3开发的,所以可能不适合低版本IE浏览器。大家可以下来看看,做的超级漂亮的。
恺撒 加密及暴力 破解 - C_abua的博客 - CSDN博客
10-23
凯撒 加密加密算法 在密码学中,恺撒密码是一种最简单且最广为人知的 加密技术。它是一种替换 加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个...
凯撒 加密与暴力 破解_木子葭的博客
12-26
凯撒 加密 在密码学中,恺撒密码是一种最简单且最广为人知的 加密技术。它是一种替换 加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏...
凯撒密码加解密及 破解实现原理_weixin_34367257的博客
12-15
根据百度百科上的解释, 凯撒密码是一种古老的 加密算法。 密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,...
凯撒密码加解密及 破解实现原理_weixin_33885676的博客
12-22
根据百度百科上的解释, 凯撒密码是一种古老的 加密算法。 密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,...
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

热门文章

  • pip freeze 导出含有路径 (@ file:///) 问题小记 11322
  • 反反爬虫(0) :还在用 selenium 裸爬吗? 你已经被盯上了!破解WebDriver反爬虫 10837
  • Flask Debug模式下代码初始化两次(重复执行) 10511
  • 发布你自己的轮子 - PyPI打包上传实践 10375
  • 爬虫解析库:lxml 与 xpath 使用小记 10213

分类专栏

  • 加密算法 1篇
  • Python 44篇
  • 爬虫 9篇
  • CentOS 7 12篇
  • 数据库 6篇
  • Flask 7篇
  • html & css 10篇
  • 经验分享 9篇
  • Git 4篇
  • Javascript 7篇

最新评论

  • 加密算法(一):30行代码破解凯撒加密

    zzzzls~: 谢谢 互相学习

  • 加密算法(一):30行代码破解凯撒加密

    zzzzls~: 谢谢 互相学习

  • 加密算法(一):30行代码破解凯撒加密

    zzzzls~: 谢谢 互相学习

  • 加密算法(一):30行代码破解凯撒加密

    脱线YOYO: 奇怪的代码增加了

  • 加密算法(一):30行代码破解凯撒加密

    strive_day: 打卡,今天又是学习的一天

最新文章

  • 倒行逆施:__eq__与 __ne__ 之间 原来还有这层关系
  • 数据结构:用 Python 实现单向链表
  • 搞不懂 Python 中的时间操作,来看看这里吧!
2020
12月 8篇
11月 9篇
10月 3篇
09月 1篇
05月 28篇
04月 29篇
03月 23篇
2019年 2篇

目录

  1. 凯撒密码
  2. Python 实现凯撒密码
  3. 破解凯撒密码
    1. 使用 Python 实现破解过程

你可能感兴趣的:(加密算法,密码学,算法,python,加密解密,凯撒)