波斯语文本中的python大写和ascii
我改用波斯语工作。我的代码返回: 关键字:文本太短,无法分析文本: 并且不会返回密钥并解密文本。波斯语文本中的波斯语文本中的python大写和ascii,python,ascii,uppercase,persian,Python,Ascii,Uppercase,Persian,我改用波斯语工作。我的代码返回: 关键字:文本太短,无法分析文本: 并且不会返回密钥并解密文本。波斯语文本中的大写或ascii有什么问题吗?我能做什么 # -*- coding: utf-8 -*- from string import uppercase from operator import itemgetter def vigenere_decrypt(target_freqs, input): nchars = len(uppercase) ordA = ord(u
大写
或ascii
有什么问题吗?我能做什么
# -*- coding: utf-8 -*-
from string import uppercase
from operator import itemgetter
def vigenere_decrypt(target_freqs, input):
nchars = len(uppercase)
ordA = ord(u"ا")
sorted_targets = sorted(target_freqs)
def frequency(input):
result = [[c, 0.0] for c in uppercase]
for c in input:
result[c - ordA][1] += 1
return result
def correlation(input):
result = 0.0
freq = frequency(input)
freq.sort(key=itemgetter(1))
for i, f in enumerate(freq):
result += f[1] * sorted_targets[i]
return result
cleaned = [ord(c) for c in input.upper() if c.isupper()]
best_len = 0
best_corr = -100.0
# Assume that if there are less than 20 characters
# per column, the key's too long to guess
for i in xrange(2, len(cleaned) // 20):
pieces = [[] for _ in xrange(i)]
for j, c in enumerate(cleaned):
pieces[j % i].append(c)
# The correlation seems to increase for smaller
# pieces/longer keys, so weigh against them a little
corr = -0.5 * i + sum(correlation(p) for p in pieces)
if corr > best_corr:
best_len = i
best_corr = corr
if best_len == 0:
return ("Text is too short to analyze", "")
pieces = [[] for _ in xrange(best_len)]
for i, c in enumerate(cleaned):
pieces[i % best_len].append(c)
freqs = [frequency(p) for p in pieces]
key = ""
for fr in freqs:
fr.sort(key=itemgetter(1), reverse=True)
m = 0
max_corr = 0.0
for j in xrange(nchars):
corr = 0.0
c = ordA + j
for frc in fr:
d = (ord(frc[0]) - c + nchars) % nchars
corr += frc[1] * target_freqs[d]
if corr > max_corr:
m = j
max_corr = corr
key += chr(m + ordA)
r = (chr((c - ord(key[i % best_len]) + nchars) % nchars + ordA)
for i, c in enumerate(cleaned))
return (key, "".join(r))
def main():
encoded = " پهيتش غعهدد ذصلدي هزفضر کنهرظ ضذکاح يصتمد "
english_frequences = [
14, 4.2, 0.7, 5.2, 0.1, 1.2, 0.4,
1, 1.4, 7.5, 0.1, 8.5, 2.1, 0.1,
3.3, 2.6, 0.7, 0.3, 0.6, 0.2, 1.5,
0.2, 1.6, 1.2, 3, 1.7, 2.7, 5.7, 7.1, 6, 5.7, 9.1]
(key, decoded) = vigenere_decrypt(english_frequences, encoded)
print "Key:", key
print "\nText:", decoded
main()
事实上,ASCII不能用来写波斯语;波斯语文本没有区分大小写。Python
大写
枚举不包含示例中的任何字符。如果你需要这方面的帮助,至少粗略地介绍一下这种加密的原理,以及加密文本的明文是很有帮助的。谢谢,我能把波斯语的代码改成什么?(这种加密的原理在不同的语言中是相同的)由于波斯语的知识有限,我不能提供更多的信息,只不过是在波斯语字母表上循环,而不是在英语字母表上循环(大写的一半)。如果语言在单词首字母、单词内部符号和单词最终符号之间存在差异,则需要对其进行规范化,而不是大小写;你从哪里想到的?对应的英文表看起来应该是1.0(尽管我没有检查);当然,没有一封信的相对频率能超过1!维格纳密码是围绕罗马字母表设计的。你必须在理解它的实际意图的情况下对其进行修改,这将重写它,而不仅仅是一个简单的更改;波斯语文本没有区分大小写。Python大写
枚举不包含示例中的任何字符。如果你需要这方面的帮助,至少粗略地介绍一下这种加密的原理,以及加密文本的明文是很有帮助的。谢谢,我能把波斯语的代码改成什么?(这种加密的原理在不同的语言中是相同的)由于波斯语的知识有限,我不能提供更多的信息,只不过是在波斯语字母表上循环,而不是在英语字母表上循环(大写的一半)。如果语言在单词首字母、单词内部符号和单词最终符号之间存在差异,则需要对其进行规范化,而不是大小写;你从哪里想到的?对应的英文表看起来应该是1.0(尽管我没有检查);当然,没有一封信的相对频率能超过1!维格纳密码是围绕罗马字母表设计的。你必须在理解它的实际意图的情况下对它进行调整,这将是重写它,而不仅仅是一个简单的更改。