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
Post a Comment