'real'词频分析
写下来想法来自于无聊时写的代码.https://cryptopals.com/sets/1/challenges/3
The hex encoded string:
1b37373331363f78151b7f2b783431333d78397828372d363c78373e783a393b3736
... has been XOR'd against a single character. Find the key, decrypt the message.You can do this by hand. But don't: write code to do it for you.
How? Devise some method for "scoring" a piece of English plaintext. Character frequency is a good metric. Evaluate each output and choose the one with the best score.
单字节密码加密
我们知道有一种简单的加密.真的很简单.
我给出的方案是这样定义的:
\]
\]
\]
\]
攻击方案
很简单,搜索一下密钥空间,看看哪些有意义.就可以解决了.但是不够高效.指的是我们还需要看256次,如果要解密的很多,会很麻烦.
过滤
最简单的就是过滤非法字符,白名单可以是[0-9a-zA-Z'!\n?\s],这样可以过滤一些不合法的结果,直接减少了工作量.但是遇到大量混淆过的问题---指定是很多虽然字符合法但是不是英文语言的情况,却又无能为力了.
频率分析
我记得我上密码学的时候,老师讲过一种词频分析的攻击方法.这里的方法的含义就是这样.对每个可能的字符串进行合法判断,给出一个可能是英文句子的分数.然后每次只要最大的分数.再加上之前的白名单过滤.我们就可以快速判断大量数据中的可读的字符串.
实现
获得一份英文单词频率分布表.\(\{x_a,x_b,..,x_z,x_{space}\}\),对于需要判定的串\(w = w_1...w_n\),最初始让\(score = 0\),分数为0.
对串中每个字符,如果\(w_i\)在分布表中,那么就\(score = score + x_{w_i}\),如果不在分布表中\(score = score - 0.05\).
代码如下:
def frequencyScore(b:bytes)->int:
'''
frequency data: https://web.archive.org/web/20170918020907/http://www.data-compression.com/english.html
return a frequencyScore for a bytes string.
'''
score = 0
letter_freqs = {
'a': 0.0651738, 'b': 0.0124248, 'c': 0.0217339,
'd': 0.0349835, 'e': 0.1041442, 'f': 0.0197881,
'g': 0.0158610, 'h': 0.0492888, 'i': 0.0558094,
'j': 0.0009033, 'k': 0.0050529, 'l': 0.0331490,
'm': 0.0202124, 'n': 0.0564513, 'o': 0.0596302,
'p': 0.0137645, 'q': 0.0008606, 'r': 0.0497563,
's': 0.0515760, 't': 0.0729357, 'u': 0.0225134,
'v': 0.0082903, 'w': 0.0171272, 'x': 0.0013692,
'y': 0.0145984, 'z': 0.0007836, ' ': 0.1918182}
for ele in b:
if (ele>ord('a') and ele<ord('z')) or (ele>ord('A') and ele<ord('Z')) or ele==ord(' '):
score += letter_freqs[chr(ele).lower()]
else:
score -= 0.05
return score
这是完整的代码:https://github.com/zhuowangy2k/code-snippet/blob/master/frequency-single-xor/frequency-single-xor.py
'real'词频分析的更多相关文章
- Fzu软工第二次作业-词频分析
(0)前言: Github项目 作业地址 (1)PSP表格: PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 ...
- json与api- 天气api 博客词频分析
一.json基础 1.1 json的介绍 json现在成为各种程序与语言之间交互的一种数据格式,本质是文本,字符串. json有两种格式: 1. 类似字典 {k:v,k,v} 2. 类似列表 { ...
- Python词频分析
Python词频分析 一.前言 在日常工作或者生活中,有时候会遇到词频分析的场景.如果是要进行词频分析,那么首先需要对句子进行分词,将句子中的单词进行切割并按照词性进行归类. 在Python中有个第三 ...
- 词频分析 评论标签 nltp APP-分析买家评论的评分-高频词:二维关系
0-定评论结果:好评.差评,1星.4星,二元化为“积极.消极”,取一元的数据为样本 1-得到词频结果:如手机类的“积极样本”得到前10的高频词:运行(run running ran).内存(memor ...
- WebGIS博客文本分析(词频分析)手动扒取 去除格式 词语分割 统计分析
1. [置顶](一)开篇—杂谈WebGIS 摘要: 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 ...
- ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
- 爬虫再探实战(五)———爬取APP数据——超级课程表【四】——情感分析
仔细看的话,会发现之前的词频分析并没有什么卵用...文本分析真正的大哥是NLP,不过,这个坑太大,小白不大敢跳...不过还是忍不住在坑边上往下瞅瞅2333. 言归正传,今天刚了解到boson公司有py ...
- jieba库的使用与词频统计
1.词频统计 (1)词频分析是对文章中重要词汇出现的次数进行统计与分析,是文本 挖掘的重要手段.它是文献计量学中传统的和具有代表性的一种内容分析方法,基本原理是通过词出现频次多少的变化,来确定热点及其 ...
- FZU软工第五次作业-词组频率分析
目录 00.前言: 01.分工: 02.PSP表格: 03.解题思路描述与设计实现说明: 解题思路简述: 关键代码 04.附加题设计与展示: 设计的创意独到之处 实现思路 实现成果展示 05.关键代码 ...
随机推荐
- mysql-centos8下安装
参考文章 1.下载安装包 客服端与服务端 依赖包 2.linux下检查是否安装 rpm -qa | grep -i mysql 安装过会显示软件名称,没安装过就是空的 3.安装包传到虚拟机 先需要把安 ...
- A Child's History of England.4
Still, the Britons would not yield. They rose again and again, and died by thousands, sword in hand. ...
- day11 四层负载均衡和http协议
day11 四层负载均衡和http协议 四层负载均衡和七层负载均衡的区别 四层和七层负载均衡的区别 四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发.由此可以看出,七层负 ...
- AFNetworking 网络错误提示data转换字符串
AFN在进行网络交互时,有时候会碰到返回502.500.404的时候.后台的总需要你配合他查出问题所在.但是AFN在返回数据序列化时解析错误只会转成NSData类型的数据,如果直接扔给后台Data的数 ...
- jmeter设置参数化
设置参数化方法有3种 第一种: 1.打开 jmeter,导入badboy录制的脚本 导入后记得选择"step"右键选择change controller ->逻辑控制器-&g ...
- Spring(2):依赖注入DI
依赖注入DI 当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例.但在Spring里,创建被 ...
- linux环境下安装jdk,tomcat
一.安装tomcat 1.使用docker安装(你得linux服务器上已经安装了docker) 1)执行命令: docker search tomcat; 2)选择第一个镜像进行下载,执行命令:doc ...
- vueAPI (data,props,methods,watch,computed,template,render)
data Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化.实例创建之后,可以通过vm.$data来访问原始数据 ...
- Redis学习推荐资料合集
目录 一.官方 二.书籍 三.推荐博客 一.官方 redis官网 redis中文网 redis中文命令网 redis模块 redis-github源码 redis报告 二.书籍 <Redis开发 ...
- Kerboros 认证
转:Kerberos介绍(全)