太强了!基于深度学习的文本自动解密算法。
本文 GitHub https://github.com/Jack-Cherish/PythonPark 已收录,技术干货文章、学习资料、一线大厂面试经验等应有尽有,欢迎 Star 和 完善。
一、加密
加密技术无处不在。
最常见的就是我们每天都在使用的密码。
登陆微信、淘宝,我们所使用的密码,就是加密存储在数据库中的。
加密技术可以保障我们密码的安全性。
如果这些密码在数据库中是以明文形式存储的,那安全隐患就太大了。
一旦数据库泄漏,就不光是一个账号被盗的问题了。
很可能是多个网站的账号同时被盗。
因为很多人的习惯是,各大网站都用相同的密码。
不过,这都 2020 年了,密码存储早已用上了不可逆的加密技术,例如 Bcrypt 加密等。同时,还有设备锁,安全性不用担心。
但这类加密算法的成本较高,并不适合所有的场景。
对于不太重要的数据,就可以使用一些低成本的加密和编码算法。
例如男人之间的“灵魂对话”。
这种加密对话,靠的是两人多年的默契,外人很难参透,无迹可寻。
而下面这种就不同了,加密和编码是有迹可循的。
今天,咱就用这个,基于深度学习的文本自动解密 Ciphey 算法,破一破这些有迹可循的加密和编码算法。
二、Ciphey
Ciphey 算法开源至今,已经获得 2.2k+ star,一度登上 Github 热榜。
每当遇到一些不知道加密方法和编码格式的文本,不妨试试 Ciphey ,说不定可以轻松解决你的烦恼。
简介
Ciphey 支持破解 6 种基础加密:
16 种编码:
哈希也支持,不过效果不可控。
现在临时关闭了,优化好后可能会重新开放。
项目地址:
https://github.com/Ciphey/Ciphey
原理
Ciphey 是将深度学习技术应用到特定的场景。
其实原理不难,就是对一段文本进行分类,判断其属于明文,还是哪种加密方法。
经过 softmax 输出每个类别的概率,然后从高到低开始遍历破解。
思路简单,但是由于涉及到特定应用领域,实现起来也挺复杂。
需要了解每种加密和编码算法的方法,以及破解和解码的方式。
三、算法测试
Ciphey 安装非常简单,直接使用 pip 安装即可:
python -m pip install -U ciphey
咱先来个简单的:
amFjayBjdWk=
这种编码结果,经常用 base64 的人一眼就能看出来。
使用 ciphey -t "amFjayBjdWk=" 命令,进行解码。
这种太小儿科,那咱换个难的。
3D6F57596A7447496A565861676B3263674D336267675759755232637631575A
这种是基础加密算法和编码的组合,可以自己尝试解密,感受下难度。
而用 Ciphey ,轻松一秒内解密完成。
轻轻松松拿到结果的同时,还可以知道,这个字符串都用了什么加密和编码算法。
有 reverse cipher、base64、base16。
而实际,我也确实是这么做的:
import base64
s = "jack cui is so handsome"
print("原始:", s)
s = s[::-1]
print("reverse cipher:",s)
s = base64.b64encode(s.encode()).decode()
print("base64:", s)
s = s[::-1]
print("reverse ciper:", s)
s = base64.b16encode(s.encode()).decode()
print("base16:", s)
先对字符串进行反转,再进行 base64 编码,将编码的结果再次反转,最后再加一个 base16 编码。
Ciphey 除了对这种加密字符串的解密,还可以针对整个文本。
可以使用如下命令,解密 encrypted.txt 文本里所有的内容。
ciphey - encrypted.txt
此外,还可以提供一个 wordlist ,辅助解密。
遇到这种加密和编码的场景,不妨试试这个,基于深度学习的文本自动解密 Ciphey 算法。
四、总结
Ciphey 要是支持的哈希解密稳定一些,那就更好了。
- 【Go 语言社区】Golang中interface判断nil问题
- 有趣的rownum测试(r10笔记第49天)
- 【Go 语言社区】关于Golang 数据缓存到redis内存数据库遇到的问题
- go中的读写锁RWMutex
- Centos7.4 版本环境下安装Mysql5.7操作记录
- 你必须知道的23个最有用的Elasticseaerch检索技巧
- Elasticsearch Jest实战深入详解
- 在oracle中计算时间差
- 【Go 语言社区】GO中怎么处理URL编码?
- C语言库函数rename
- Oracle 12c DG新特性Far Sync(r10笔记第67天)
- iOS微信特殊字符保护方案
- 简单易学的机器学习算法——谱聚类(Spectal Clustering)
- oracle数据库 如何查询某个表的约束条件
- 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 数组属性和方法
- 使用PHP对接国外的PAYPAL支付最新REST API接口。
- golang 学习(10): 使用go语言调用c语言的so动态库
- Django的form,model自定制
- 排序算法与查找算法
- nginx学习(1): openresty安装
- 2020年8月26日更新WINDOWS服务器同时安装多个版本的MYSQL的方法,MQYSQL5和MQYSQL8的共存。
- python 自动化测试(3):数据库连接与使用
- 微信小程序实战开发二:微信小程序 WEUL组件之 画廊组件
- 关于Cookie和Session
- 微信小程序实战开发一:在小程序中使用useExtendedLib方法引入官方UI
- python 自动化测试(4):日志类封装
- 微信小程序实战开发三:小程序之全局配置APP.JSON之底部菜单栏tabBar
- python 自动化测试(5):页面基类封装
- 微信小程序实战开发四:小程序获取用户信息流程及信息存储方式解析
- python 自动化测试(6):jar包调用