标签:log 解密 ref uri mod lse lib color gcd
公式如下:
"""
c代表密文,m代表明文,a, b表示密钥
c = a*m + b (mod 26)
m = a的逆元*(c-b) (mod 26)
"""
m = "security".lower()
c = ""
a = 7
b = 21
for i in range(0, len(m)):
c = c + chr((((ord(m[i])-97)*a+b)%26)+97)
print(c)
求逆元可以使用libnum库,也可以使用gmpy2库,也可以手写代码。
求逆元使用libnum库:
"""
c代表密文,m代表明文,a, b表示密钥
c = a*m + b (mod 26)
m = a的逆元*(c-b) (mod 26)
d表示a的逆元
"""
import libnum
c = "vlxijh".lower()
m = ""
a = 7
b = 21
d = libnum.xgcd(a, 26)[0]
for i in range(0, len(c)):
m = m + chr((((ord(c[i])-97)-b+26)*d)%26 + 97)
print(m)
求逆元使用gmpy2库
"""
c代表密文,m代表明文,a, b表示密钥
c = a*m + b (mod 26)
m = a的逆元*(c-b) (mod 26)
d表示a的逆元
"""
import gmpy2
c = "vlxijh".lower()
m = ""
a = 7
b = 21
d = gmpy2.invert(a, 26)
print(d)
for i in range(0, len(c)):
m = m + chr((((ord(c[i])-97)-b+26)*d)%26 + 97)
print(m)
求逆元使用手写代码:
"""
c代表密文,m代表明文,a, b表示密钥
c = a*m + b (mod 26)
m = a的逆元*(c-b) (mod 26)
d表示a的逆元
"""
def egcd(a, b):
if (b == 0):
return 1, 0, a
else:
x, y, q = egcd(b, a % b) # q = GCD(a, b) = GCD(b, a%b)
x, y = y, (x - (a // b) * y)
return x, y, q
def mod_inv(a, b):
return egcd(a, b)[0] % b # 求a模b得逆元
c = "vlxijh".lower()
m = ""
a = 7
b = 21
d = mod_inv(a, 26)
for i in range(0, len(c)):
m = m + chr((((ord(c[i])-97)-b+26)*d)%26 + 97)
print(m)
推荐一篇文章:
https://xz.aliyun.com/t/2446
标签:log 解密 ref uri mod lse lib color gcd
原文地址:https://www.cnblogs.com/v01cano/p/11798433.html