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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/786376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存