以下python代码用于生成Hill密码的密钥矩阵及其逆矩阵
#@PydevCodeAnalysisIgnore
"""
input : N
output : a pair of matrix which is inverse matrix of another.
"""
import random
import copy
import fractions
def relative_prime_lst(N):
'''
list all relatively prime in range(1,N) with N
@param N: integer
'''
return [m for m in range(1, N) if fractions.gcd(m,N)==1]
def ext_euclid(a,b):
'''
get the result of a*s+b*t = gcd(a,b)
return (s,t,gcd)
@param a: integer >0
@param b: integer >0
'''
r1 = a
r2 = b
s1 = 1
s2 = 0
t1 = 0
t2 = 1
while r2>0:
q = r1/r2
r = r1-r2*q
r1 = r2
r2 = r
s = s1-q*s2
s1 = s2
s2 = s
t = t1-q*t2
t1 = t2
t2 &