Affine Cipher is a relatively simple way for encrypting/decrypting data with low CPU cost but with the expensive of low level of security.

Basic Syntax:     f ( X ) = α X + β (mod 26)

Note: the mod 26 means this cipher is using the English alphabet, which contains 26 characters: • X is the correspondent value of the character that will be encrypted.
• ( α , β ) is a valid key if:
• gcd ( α , 26 ) = 1
• 1 ≤ α ≤ 25
• 0 ≤ β ≤ 25

Let’s walk through the encryption and decryption process in the Python code below that is a fork of [Link].

Encryption:

def egcd(a, b):
x,y, u,v = 0,1, 1,0
while a != 0:
q, r = b//a, b%a
m, n = x-u*q, y-v*q
b,a, x,y, u,v = a,r, u,v, m,n
gcd = b
return gcd, x, y

def modinv(a, m):
gcd, x, y = egcd(a, m)
if gcd != 1:
return None
else:
return x % m

def affine_encrypt(text, key):
'''
C = (a*P + b) % 26
'''
return ''.join([ chr((( key*(ord(t) - ord('A')) + key ) % 26) + ord('A')) for t in text.upper().replace(' ', '') ])

text = 'PlainText'
key = [3, 18]

print(affine_encrypt(text, key))

Decryption:

def egcd(a, b):
x,y, u,v = 0,1, 1,0
while a != 0:
q, r = b//a, b%a
m, n = x-u*q, y-v*q
b,a, x,y, u,v = a,r, u,v, m,n
gcd = b
return gcd, x, y

def modinv(a, m):
gcd, x, y = egcd(a, m)
if gcd != 1:
return None
else:
return x % m

def affine_decrypt(cipher, key):
'''
P = (a^-1 * (C - b)) % 26
'''
return ''.join([ chr((( modinv(key, 26)*(ord(c) - ord('A') - key)) % 26) + ord('A')) for c in cipher ])

cipher = 'LZSQFXEJX'
key = [3, 18]
print(affine_decrypt(cipher, key))