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

一、安装 jieba 库


官网

python的jieba库教程 python jieba库下载_压缩包


python的jieba库教程 python jieba库下载_压缩包_02

蓝奏云

python的jieba库教程 python jieba库下载_压缩包_03


2.解压到目录

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

python的jieba库教程 python jieba库下载_官网_04


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

python的jieba库教程 python jieba库下载_暴力破解_05


4.使用cd命令安装jieba库

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

python的jieba库教程 python jieba库下载_python_06

若使用pycharm,在控制台输入 pip install jieba 即可

python的jieba库教程 python jieba库下载_压缩包_07

二、思考破解

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)

python的jieba库教程 python jieba库下载_压缩包_08


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

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

python的jieba库教程 python jieba库下载_python_09


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

python的jieba库教程 python jieba库下载_暴力破解_10