波斯语文本中的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!维格纳密码是围绕罗马字母表设计的。你必须在理解它的实际意图的情况下对它进行调整,这将是重写它,而不仅仅是一个简单的更改。