各种密码原理(边积累边更新)
也有看过很多大佬的总结,本来想转载一个过来,但还是决定把自己用过的亲自总结一遍,欢迎指教。
1、凯撒加密
古典密码之一,原理:移位,一般是ASCII码移位。
很多在线工具和软件都只进行26个字母的移位,不处理符号,且在26个字母之间循环移位(Z移位变成A)。
例:aZZg/x\ZbavpZiEZp+n)o+用凯撒之后为
bAAh/y\AcbwqAjFAq+o)p+
cBBi/z\BdcxrBkGBr+p)q+
dCCj/a\CedysClHCs+q)r+
eDDk/b\DfeztDmIDt+r)s+
fEEl/c\EgfauEnJEu+s)t+
gFFm/d\FhgbvFoKFv+t)u+
hGGn/e\GihcwGpLGw+u)v+
iHHo/f\HjidxHqMHx+v)w+
jIIp/g\IkjeyIrNIy+w)x+
kJJq/h\JlkfzJsOJz+x)y+
lKKr/i\KmlgaKtPKa+y)z+
mLLs/j\LnmhbLuQLb+z)a+
nMMt/k\MonicMvRMc+a)b+
oNNu/l\NpojdNwSNd+b)c+
pOOv/m\OqpkeOxTOe+c)d+
qPPw/n\PrqlfPyUPf+d)e+
rQQx/o\QsrmgQzVQg+e)f+
sRRy/p\RtsnhRaWRh+f)g+
tSSz/q\SutoiSbXSi+g)h+
uTTa/r\TvupjTcYTj+h)i+
vUUb/s\UwvqkUdZUk+i)j+
wVVc/t\VxwrlVeAVl+j)k+
xWWd/u\WyxsmWfBWm+k)l+
yXXe/v\XzytnXgCXn+l)m+
zYYf/w\YazuoYhDYo+m)n+
aZZg/x\ZbavpZiEZp+n)o+
可以看到只在大小写字母间循环移位,对符号不予理睬,但有的题目是需要符号移位的,下面给出一个ASCII范围在33-126之内的循环移位脚本(94种结果):
代码转自:https://blog.csdn.net/dongyanwen6036/article/details/76447628
# 实现33-126ASCII能打印的字符循环平移
# 和通常凯撒加密不同注意
def change(c, i):
num = ord(c)
if (num >= 33 and num <= 126):
num = 33 + (num + i - 33) % (94) # 126-33=93
return chr(num)
def kaisa_jiAmi(string, i):
string_new = ''
for s in string:
string_new += change(s, i)
print(string_new)
return string_new
# 本题有种暴力解密感觉
def kaisa_jiEmi(string):
for i in range(0, 94):
print('第' + str(i + 1) + '种可能:', end=' ')
# 区别在于 string 是该对象原本就是字符串类型, 而 str()则是将该对象转换成字符串类型。
kaisa_jiAmi(string, i)
# 你要知道input输入的数据类型都是string
def main():
print('请输入操作,注意不是平常26种:')
choice = input('1:恺撒加密,2:凯撒穷举解密.请输入1或2:')
if choice == '1':
string = input('请输入需要加密字符串: ')
num = int(input('请输入需要加密的KEY: '))
kaisa_jiAmi(string, num)
elif choice == '2':
string = input('请输入需要解密字符串: ')
kaisa_jiEmi(string)
else:
print('输入错误,请重试')
main()
if __name__ == '__main__':
main()
2、栅栏加密
古典密码之一,原理:就是把要加密的明文分成N个一组,然后把每组的第1个字分别连起来,然后再把每个组按顺序依次连接,形成一段无规律密文。
所以一般密文个数不是质数
例:2栏的栅栏密码。
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
解码用工具就可以。
- 新手指南OpenStack:Nova的基础知识
- Python-装饰器详解
- Contact Manager Web API 示例[2] Web API Routing
- Android一些关于分辨率和布局的设置
- log4net 中错误 System.Web.HttpException (0x80004005): 文件不存在
- Contact Manager Web API 示例[2] Web API Routing
- Python内置函数
- NET实现微信公共平台上传下载多媒体文件
- css3基础知识——回顾
- Contact Manager Web API 示例[3] 分页和查询(Paging and Querying)
- @font-face css3自定义个性化字体
- 你不知道的javaScript笔记(7)
- Contact Manager Web API 示例[4] 异常处理(Exception Handling)
- 你不知道的javaScript笔记(6)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- vue 渐变色文字
- Java 水题系列(2)Pi的近似值
- vue 无缝滚动组件 vue-seamless-scroll
- Java 水题系列(3)回文素数
- NDB Cluster 8.0中的自动模式同步:第1部分
- MongoDB助力一个物流订单系统
- NDB Cluster 8.0中的自动模式同步:第2部分
- NetCore配置框架详解
- 初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存
- 群组复制MySQL Group Replication
- 关于自定义单选框InfoPreference的笔记
- Python爬虫之gerapy爬虫管理
- 内存地址中藏着的学问
- Python爬虫之crawlspider类的使用
- 数据结构 - 堆(Heap)