仿射密码是一种替换密码。它是一个字母对一个字母的。它的加密函数是e(x)=ax+b(mod m),其中a和m互质,m是字母的数目。解码函数是d(x)=a^-1(x-b)(mod m),其中是a在Z(m)群的乘法逆元。
仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程a
x+b(mod 26)加密,b为移动大小。
**

习题举例

密文UCR 是由仿射函数9x+2(mod 26)加密的。求明文。
解:y=9x+2(mod 26)→x=(1/9)(y-2)(mod26). 9K ≡1(mod26)→K=3(为乘法逆元)
∴x ≡3(y-2)=3y-6≡3y+20(mod26)
∴U:3
20+20(mod26) ≡2→c ;C:32+20(mod26) ≡0→a ; R:317+20(mod26) ≡19→t ∴明文为:cat

加密代码

  discryptstr=input()
  a=int(input())
  b=int(input())
  c=[]
  for i in range(len(discryptstr)):
          # 加密成相应的大写字母
          c.append(chr(((ord(discryptstr[i]) - 97) * a + b) % 26 + 65))
  d = ' '.join(c)
  print(d)

解密代码

  flag="daijiamizifuchuan"
  flaglist=[]
  for i in flag:
      flaglist.append(ord(i)-97)
  newflag=""
  a=int(input())
  b=int(input())
  for i in flaglist:
      for j in range(0,26):
          c = (a * j + b) % 26
          if(c == i):
              newflag += chr(j+97)
  print(newflag)

仿射密码CTF

Bugku-affine
GKCTF2020-小学生的密码学

 posted on 2020-05-26 09:43  戈木  阅读(519)  评论(0)    收藏  举报