【python】输入加密的中文句子,暴力破解答案。使用jieba库

【python】输入加密的中文句子,暴力破解答案。使用jieba库

一、安装 jieba 库

若网络好,直接在cmd中输入 pip install jieba 即可安装

1.jieba库下载链接:

(不推荐,速度太慢)官网:https://pypi.org/project/jieba/
(推荐使用)我下载好的安装包-蓝奏云:https://wwc.lanzouh.com/iXXJq03vul3e

官网

在这里插入图片描述
在这里插入图片描述

蓝奏云

在这里插入图片描述


2.解压到目录

解压到目录中,我选择解压到 pycharm 中,方便以后寻找。路径可以自选

在这里插入图片描述


3.win+R打开运行,输入cmd,进入命令界面

在这里插入图片描述


4.使用cd命令安装jieba库

我解压压缩包的目录是 E:\PyCharm\PyCharm 2021.3.3\script\jieba-0.42.1

在这里插入图片描述

若使用pycharm,在控制台输入 pip install jieba 即可
在这里插入图片描述

二、思考破解

1.大体定位前后位置

# 测试用,用来确定语句是正加密还是负加密,证明为正加密且加密数为4092
Chinese=['我','你','他','她','江水','大河','老师','教师','连绵不绝','敬仰','佩服','长江','黄河','故乡','月亮','同学','可爱']
re = "爍"  #选的是第一个字
s=0
while (True):
    s+=1
    checkText = ord(re) - 1
    re = chr(checkText)
    for i in Chinese:
        if re == i:
            print(re,s)
            exit(0)

在这里插入图片描述


2.测试未知词组

import jieba
def Crack(text):
    Chinese = ['我', '你', '他', '她', '江水', '大河', '老师', '教师', '连绵不绝', '敬仰', '佩服', '长江', '黄河', '故乡', '月亮', '同学', '可爱']
    re = text  # 将text放入re中,开始循环寻找合适的字词。
    result = ""  # 解密后的语句
    for i in re:  # 将输入的re逐字解密并放入result中
        result = result + chr(ord(i) - 4092)

    seg_list = jieba.cut(result, cut_all=False)  # jieba库中的默认精确模式
    final = " ".join(seg_list)
    final = final.split(" ")
    # print(final)
    count=0
    for i in Chinese:
        for j in final:
            if i==j:
                count+=1
                # print(j)
    # print(count)
    if count/len(final)>=0.4:
        return final
        
t = "爍毵追渄蚀彥眉楾搈绐绐籛簰临軱帉軙"
org = Crack(t)
print(org)
s = 0

红字不是错误,是在对比词语库

在这里插入图片描述


3.使用循环按部就班进行暴力破解

import jieba


def Crack(text):
    Chinese=['我','你','他','她','江水','大河','老师','教师','连绵不绝','敬仰','佩服','长江','黄河','故乡','月亮','同学','可爱']
    re = text       # 将text放入re中,开始循环寻找合适的字词。
    while(True):
        result = ""  # 解密后的语句
        for i in re:    # 将输入的re逐字解密并放入result中
            result=result+chr(ord(i)-1)
        seg_list = jieba.cut(result, cut_all=False)  # jieba库中的精确模式
        final = " ".join(seg_list)          # jieba库转换的是object类型,需要转为str
        final = final.split(" ")            # 为方便统计转为数组
        count = 0                           # 统计相同字符数

        # 与字典循环对比
        for i in Chinese:
            for j in final:
                if i == j:
                    count += 1
        # 如果不加len(final)>5条件,会导致len(final)为0,而0不能做分母,会报错。
        if count / len(final) >= 0.4 and len(final)>5:
            final = "".join(final)      # 增加可读性
            return final
        else:
            re=result
            
t = "爍毵追渄蚀彥眉楾搈绐绐籛簰临軱帉軙"
org = Crack(t)
print(org)
s = 0

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值