Panipat Institute of Engineering & Technology Samalkha Computer Science & Engineering Department
Panipat Institute of Engineering & Technology Samalkha Computer Science & Engineering Department
Panipat Institute of Engineering & Technology Samalkha Computer Science & Engineering Department
12
Affiliated to:
Asmit 2820425
4. Implementation of Euclidean’s
algorithm, Chinese reminder theorem,
Primality test, Fermat’s algorithms,
Euler algorithm.
-2-
Asmit 2820425
EXPERIMENT-1
Aim: Write a program to perform encryption and decryption 3 using the following
algorithms: a) Ceaser Cipher b) Substitution Cipher c) Hill Cipher
Code:
(a) Ceaser cipher
(Encryption)
def encrypt(text,s):
result = ""
for i in range(len(text)):
char = text[i]
if (char.isupper()):
result += chr((ord(char) + s-65) % 26 + 65)
else:
result += chr((ord(char) + s - 97) % 26 + 97)
return result
text = "ATTACKATONCE"
s=4
print ("Text : " + text)
print ("Shift : " + str(s))
print ("Cipher: " + encrypt(text,s))
OUTPUT :
-3-
Asmit 2820425
(Decryption)
def encrypt(text,s):
result = ""
for i in range(len(text)):
char = text[i]
if (char.isupper()):
result += chr((ord(char) + s-65) % 26 + 65)
else:
result += chr((ord(char) + s - 97) % 26 + 97)
return result
text = "0123456789"
s=4
Cipher=encrypt(text,s)
OUTPUT:
-4-
Asmit 2820425
import random
def makeKey(alphabet):
alphabet = list(alphabet)
random.shuffle(alphabet)
return ''.join(alphabet)
print(plaintext)
print(cipher)
print(decrypt(cipher, key, alphabet))
OUTPUT:
-5-
Asmit 2820425
( c ) Hill Cipher
(Encryption)
def getKeyMatrix(key):
k=0
for i in range(3):
for j in range(3):
keyMatrix[i][j] = ord(key[k]) % 65
k += 1
def encrypt(messageVector):
for i in range(3):
for j in range(1):
cipherMatrix[i][j] = 0
for x in range(3):
cipherMatrix[i][j] += (keyMatrix[i][x] *
messageVector[x][j])
cipherMatrix[i][j] = cipherMatrix[i][j] % 26
getKeyMatrix(key)
for i in range(3):
messageVector[i][0] = ord(message[i]) % 65
encrypt(messageVector)
CipherText = []
for i in range(3):
CipherText.append(chr(cipherMatrix[i][0] + 65))
-6-
Asmit 2820425
def main():
message = "ACT"
key = "GYBNQKURP"
HillCipher(message, key)
OUTPUT:
-7-
Asmit 2820425
EXPERIMENT – 2
Aim: Implementation of various Stream Ciphers, such as, additive cipher, multiplicative
cipher, and affine cipher with cryptanalysis.
Code:
(Additive Cipher)
plain = input("Enter your plaintext: ")
key = int(input("Enter your cipher key: "))
encrypted = ""
for char in plain:
if char.isalpha():
shifted = (ord(char) - 97 + key) % 26 + 97
encrypted += chr(shifted)
else:
encrypted += char
print(encrypted)
OUTPUT:
(Multiplicative Cipher)
encrypted = ""
for char in plain:
if char.isalpha():
shifted = ((ord(char) - 97) * key) % 26 + 97
encrypted += chr(shifted)
else:
encrypted += char
print(encrypted)
-8-
Asmit 2820425
OUTPUT:
(Affine Cipher)
plain = input("Enter your plaintext: ")
a = int(input("Enter the first key (must be coprime with 26): "))
b = int(input("Enter the second key: "))
alphabet = "abcdefghijklmnopqrstuvwxyz"
encrypted = ""
for char in plain:
if char.isalpha():
index = alphabet.index(char)
shifted = (a * index + b) % 26
encrypted += alphabet[shifted]
else:
encrypted += char
print(encrypted)
OUTPUT:
-9-
Asmit 2820425
EXPERIMENT – 3
Aim: Write a program to implement the DES and AES algorithm logic.
Code:
1. (DES)
def hex2bin(s):
mp = {'0': "0000",
'1': "0001",
'2': "0010",
'3': "0011",
'4': "0100",
'5': "0101",
'6': "0110",
'7': "0111",
'8': "1000",
'9': "1001",
'A': "1010",
'B': "1011",
'C': "1100",
'D': "1101",
'E': "1110",
'F': "1111"}
bin = ""
for i in range(len(s)):
bin = bin + mp[s[i]]
return bin
def bin2hex(s):
mp = {"0000": '0',
"0001": '1',
"0010": '2',
"0011": '3',
"0100": '4',
"0101": '5',
- 10
Asmit 2820425
"0110": '6',
"0111": '7',
"1000": '8',
"1001": '9',
"1010": 'A',
"1011": 'B',
"1100": 'C',
"1101": 'D',
"1110": 'E',
"1111": 'F'}
hex = ""
for i in range(0, len(s), 4):
ch = ""
ch = ch + s[i]
ch = ch + s[i + 1]
ch = ch + s[i + 2]
ch = ch + s[i + 3]
hex = hex + mp[ch]
return hex
def bin2dec(binary):
binary1 = binary
decimal, i, n = 0, 0, 0
while(binary != 0):
dec = binary % 10
decimal = decimal + dec * pow(2, i)
binary = binary//10
i += 1
return decimal
def dec2bin(num):
res = bin(num).replace("0b", "")
if(len(res) % 4 != 0):
div = len(res) / 4
div = int(div)
- 11
Asmit 2820425
# S-box Table
sbox = [[[14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7],
[0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8],
[4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0],
[15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13]],
# Initial Permutation
pt = permute(pt, initial_perm, 64)
print("After initial permutation", bin2hex(pt))
- 14
Asmit 2820425
# Splitting
left = pt[0:32]
right = pt[32:64]
for i in range(0, 16):
# Expansion D-box: Expanding the 32 bits data into 48 bits
right_expanded = permute(right, exp_d, 48)
# S-boxex: substituting the value from s-box table by calculating row and
column
sbox_str = ""
for j in range(0, 8):
row = bin2dec(int(xor_x[j * 6] + xor_x[j * 6 + 5]))
col = bin2dec(
int(xor_x[j * 6 + 1] + xor_x[j * 6 + 2] + xor_x[j * 6 + 3] + xor_x[j *
6 + 4]))
val = sbox[j][row][col]
sbox_str = sbox_str + dec2bin(val)
# Swapper
if(i != 15):
left, right = right, left
print("Round ", i + 1, " ", bin2hex(left),
" ", bin2hex(right), " ", rk[i])
# Combination
combine = left + right
- 15
Asmit 2820425
pt = "123456ABCD132536"
key = "AABB09182736CCDD"
# Key generation
# --hex to binary
key = hex2bin(key)
# Splitting
left = key[0:28] # rkb for RoundKeys in binary
right = key[28:56] # rk for RoundKeys in hexadecimal
- 16
Asmit 2820425
rkb = []
rk = []
for i in range(0, 16):
# Shifting the bits by nth shifts by checking from shift table
left = shift_left(left, shift_table[i])
right = shift_left(right, shift_table[i])
rkb.append(round_key)
rk.append(bin2hex(round_key))
print("Encryption")
cipher_text = bin2hex(encrypt(pt, rkb, rk))
print("Cipher Text : ", cipher_text)
print("Decryption")
rkb_rev = rkb[::-1]
rk_rev = rk[::-1]
text = bin2hex(encrypt(cipher_text, rkb_rev, rk_rev))
print("Plain Text : ", text)
- 17
Asmit 2820425
OUTPUT :
(For encryption)
(For decryption)
- 18
Asmit 2820425
2. (AES)
from Crypto.Cipher import AES
key = b'C&F)H@McQfTjWnZr'
nonce = cipher.nonce
ciphertext = cipher.encrypt(data)
plaintext = cipher.decrypt(ciphertext)
print("Plain text:", plaintext)
OUTPUT:
- 19
Asmit 2820425
EXPERIMENT-4
OUTPUT:
def inv(a, m) :
m0 = m
x0 = 0
x1 = 1
if (m == 1) :
return 0
- 20
2
while (a > 1) :
q = a // m
t=m
m=a%m
a=t
t = x0
x0 = x1 - q * x0
x1 = t
if (x1 < 0) :
x1 = x1 + m0
return x1
prod = 1
for i in range(0, k) :
prod = prod * num[i]
result = 0
for i in range(0,k):
pp = prod // num[i]
result = result + rem[i] * inv(pp, num[i]) * pp
OUTPUT:
- 21
CFGHZ
2820425
(Primality Test)
import random
y = (y * y) % mod;
exponent = exponent // 2;
return x % mod;
if (a == 0):
return 0;
ans = 1;
if (a < 0):
a = -a;
if (n % 4 == 3):
ans = -ans;
if (a == 1):
return ans;
while (a):
if (a < 0):
- 22
Asmit 2820425
a = -a;
if (n % 4 == 3):
ans = -ans;
while (a % 2 == 0):
a = a // 2;
if (n % 8 == 3 or n % 8 == 5):
ans = -ans;
a, n = n, a;
if (a % 4 == 3 and n % 4 == 3):
ans = -ans;
a = a % n;
if (a > n // 2):
a = a - n;
if (n == 1):
return ans;
return 0;
if (p < 2):
return False;
if (p != 2 and p % 2 == 0):
return False;
for i in range(iterations):
a = random.randrange(p - 1) + 1;
jacobian = (p + calculateJacobian(a, p)) % p;
mod = modulo(a, (p - 1) / 2, p);
return True;
- 23
Asmit 2820425
iterations = 50;
num1 = 16;
num2 = 19;
if (solovoyStrassen(num1, iterations)):
print(num1, "is prime ");
else:
print(num1, "is composite");
if (solovoyStrassen(num2, iterations)):
print(num2, "is prime");
else:
print(num2, "is composite");
OUTPUT:
(Fermat Algorithm)
def gcd(a, b):
if(b == 0):
return a
else:
return gcd(b, a % b)
if (y == 0):
return 1
p = power(x, y // 2, m) % m
p = (p * p) % m
if ( gcd(a, m) != 1):
print("Inverse doesn't exist")
- 24
Asmit 2820425
else:
a=5
m = 13
modInverse(a, m)
OUTPUT:
(Euler Algorithm)
def f(x,y):
return x+y
def euler(x0,y0,xn,n):
h = (xn-x0)/n
print('\n-----------SOLUTION ----------- ')
print(' ')
print('x0\ty0\tslope\tyn')
print(' ')
for i in range(n):
slope = f(x0, y0)
yn = y0 + h * slope
print('%.4f\t%.4f\t%0.4f\t%.4f'% (x0,y0,slope,yn) )
print(' ')
y0 = yn
x0 = x0+h
xn = float(input('xn = '))
OUTPUT:
- 26
Asmit 282045
EXPERIMENT-5
Code:-
- 27
Asmit 282045
OUTPUT:
- 28
Asmit 282045
EXPERIMENT – 6
Aim: Using Cryptography, encrypt the text “Hello world” using Blow Fish.
Code:-
OUTPUT:
- 29
Asmit 2820425
EXPERIMENT – 7
Code:-
import hashlib
result = hashlib.md5(b’abcd')
OUTPUT:
- 30
Asmit 2820425
EXPERIMENT – 8
import math
p=3
q=7
n = p*q
print("n =", n)
phi = (p-1)*(q-1)
e=2
while(e<phi):
break
else:
e += 1
print("e =", e)
k=2
- 31
Asmit 2820425
d = ((k*phi)+1)/e
print("d =", d)
msg = 11
print(f'Original message:{msg}')
C = pow(msg, e)
C = math.fmod(C, n)
M = pow(C, d)
M = math.fmod(M, n)
OUTPUT:
- 32
Asmit 2820425
EXPERIMENT – 9
Code:-
import hashlib
str = "www.MyABCDEFS.com"
encoded_str = str.encode()
hash_obj = hashlib.sha1(encoded_str)
hexa_value = hash_obj.hexdigest()
OUTPUT:
- 33
Asmit
EXPERIMENT-10
Aim: Create your own key with Diffie Hellman Key exchange mechanism.
Code:
def prime_checker(p):
if p < 1:
return -1
elif p > 1:
if p == 2:
return 1
for i in range(2, p):
if p % i == 0:
return -1
return 1
l = []
while 1:
P = int(input("Enter P : "))
if prime_checker(P) == -1:
print("Number Is Not Prime, Please Enter Again!")
continue
break
while 1:
G = int(input(f"Enter The Primitive Root Of {P} : "))
if primitive_check(G, P, l) == -1:
print(f"Number Is Not A Primitive Root Of {P}, Please Try Again!")
continue
- 34
Asmit 2820425
break
if k1 == k2:
print("Keys Have Been Exchanged Successfully")
else:
print("Keys Have Not Been Exchanged Successfully")
OUTPUT:
- 35
Asmit 2820425
- 36