Spaces:
Running
Running
File size: 5,528 Bytes
e9046e8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | def notuse (notusing_character):#用于屏蔽在密文破解时用于分割句子的符号,例如句号,分号这类符号
blacklist={}
#允许用户重复输入一个黑名单字符,采用字典类型存储黑名单。
for char in notusing_character:
if (char in blacklist):
blacklist[char]+=1
else:
blacklist[char]=1
return blacklist
def read_key(string):#读入密钥,并生成映射字典
pairs = string.split() # 分割字符串为键值对列表
dict={}
for pair in pairs:
key, value = pair.split('=') # 分割键值对为键和键值
dict[key] = value
return dict
# # def count_character(string, blacklist):
# # "记录不同字符的概率"
# # character_count = {}#存放字符频率的字典
# # number1 = 0
# # for char in string:
# # if (char not in blacklist):#跳过黑名单字符
# # if (char in character_count):
# # character_count[char] += 1
# # else:
# # character_count[char] = 1
# # number1 += 1#计算有效字符的总个数
# # character_proability = {}#存放字符概率的字典
# # for char, count in character_count.items():
# # proability = count / number1
# # formatted_proability = "{:.2%}".format(proability)
# # character_proability[char] = formatted_proability#计算字符的概率
# # return sort_dict(character_proability)
def count_bingary_character(string,blacklist):
"记录二元字符的概率"
bingary_character_count = {}#存放二元字符频率的字典
number2=0
# 遍历字符串,提取二元字符并统计频率
for i in range(len(string) - 1):
char1 = string[i]
char2 = string[i + 1]
if (char1 not in blacklist) and (char2 not in blacklist): # 跳过黑名单字符,若两个字符都不在黑名单中则合成一个二元字符
bingary_character = char1 + char2
if bingary_character in bingary_character_count:
bingary_character_count[bingary_character] += 1
else:
bingary_character_count[bingary_character] = 1
number2+=1#计算有效二元字符的数量
bingary_character_proability = {}#存放二元字符概率的字典
for bingary_character, count in bingary_character_count.items():
probability = count / number2
formatted_proability = "{:.2%}".format(probability)
bingary_character_proability[bingary_character] = formatted_proability#计算二元字符的概率
return sort_dict(bingary_character_proability)
# def count_ternary_character(string,blacklist):
# "记录三元字符的概率"
# ternary_character_count = {}#存放三元字符频率的字典
# number3=0
# # 遍历字符串,提取三元字符并统计频率
# for i in range(len(string) - 2):
# char1 = string[i]
# char2 = string[i + 1]
# char3 = string[i + 2]
# if (char1 not in blacklist) and (char2 not in blacklist) and (char3 not in blacklist): # 跳过黑名单字符,若三个字符都不属于黑名单则合成一个三元字符
# ternary_character = char1 + char2 +char3
# if ternary_character in ternary_character_count:
# ternary_character_count[ternary_character] += 1
# else:
# ternary_character_count[ternary_character] = 1
# number3+=1#计算有效三元字符的数量
# ternary_character_proability = {}#存放三元字符概率的字典
# for ternary_character, count in ternary_character_count.items():
# proability = count / number3
# formatted_proability = "{:.2%}".format(proability)#直接把小数显示为百分数
# ternary_character_proability[ternary_character] =formatted_proability#计算三元字符的概率
# return sort_dict(ternary_character_proability)
def print_dict(dictionary): # 打印字典
dictionary = sort_dict(dictionary)
for key, value in dictionary.items():
print(key, ":", value)
def sort_dict(percentage_dict): # 字典排序
sorted_dict = dict(sorted(percentage_dict.items(
), key=lambda item: float(item[1].rstrip("%")), reverse=True))
return sorted_dict
# def read_frequency_file(file_path,frequency_dict):#读入英文字频分布
# with open(file_path, 'r') as file:
# for line in file:
# line = line.strip()
# if line: # 确保不是空行
# letter, frequency = line.split()
# letter = letter.strip()
# frequency = frequency.strip().rstrip('%')
# frequency = float(frequency) / 100.0 # 将百分数转换为浮点数
# formatted_number = "{:.2%}".format(frequency)#直接把小数显示为百分数
# frequency_dict[letter] =formatted_number
# return frequency_dict
# def read_frequency_file1(file_path,frequency_list):#三元组的具体频率没找到只找到概率排序
# with open(file_path, 'r') as file:
# for line in file:
# line = line.strip()
# if line:
# frequency_list.append(line)
# return frequency_list
# def print_list(lst):
# for index, value in enumerate(lst):
# print(f"Index {index}: {value}")
|