python uppercase and ascii in persian text -


i change this code work in persian. code returns: key: text short analyze text: , doesn't return key , decrypt text. wrong uppercase or ascii in persian text? can do?

# -*- coding: utf-8 -*- string import uppercase 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] c in uppercase]         c in input:             result[c - orda][1] += 1         return result      def correlation(input):         result = 0.0         freq = frequency(input)         freq.sort(key=itemgetter(1))          i, f in enumerate(freq):             result += f[1] * sorted_targets[i]         return result      cleaned = [ord(c) c in input.upper() if c.isupper()]     best_len = 0     best_corr = -100.0      # assume if there less 20 characters     # per column, key's long guess     in xrange(2, len(cleaned) // 20):         pieces = [[] _ in xrange(i)]         j, c in enumerate(cleaned):             pieces[j % i].append(c)          # correlation seems increase smaller         # pieces/longer keys, weigh against them little         corr = -0.5 * + sum(correlation(p) p in pieces)          if corr > best_corr:             best_len =             best_corr = corr      if best_len == 0:         return ("text short analyze", "")      pieces = [[] _ in xrange(best_len)]     i, c in enumerate(cleaned):         pieces[i % best_len].append(c)      freqs = [frequency(p) p in pieces]      key = ""     fr in freqs:         fr.sort(key=itemgetter(1), reverse=true)          m = 0         max_corr = 0.0         j in xrange(nchars):             corr = 0.0             c = orda + j             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)          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() 


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

css - Make div keyboard-scrollable in jQuery Mobile? -

ruby on rails - Seeing duplicate requests handled with Unicorn -