Professional Documents
Culture Documents
Practical 6 Merged
Practical 6 Merged
Practical 6
implement DES Encryption-Decryption:
DES Algorithm:
DES implements 64-bit block using a 56-bit key and produces 64-bit ciphertext. Same step with same key, are used
to reverse the encryption with the order of the keys reversed.
DES Encryption:
Encryption function has two inputs: Plaintext to be encrypted and the key.
• The 64-bit plaintext passes through an initial permutation(IP) that rearranges buts to produce the
permuted input.
• The permuted output is then passes through sixteen rounds of the same function, which involves both
permutation and substitution functions. The left and right halves from the left round are swapped to
produce pre-output.
• The pre-output is passed through a permutation that is the reverse of initial permutation(IP -1) , to produce
the 64-bit cipher text.
Practical 6 18
190210107073 3170720-IS_LAB
The right-hand portion of the figure shows the way in which the 56-bit key is used.
DES Decryption:
Decryption in DES is same as encryption , except that the sub keys are used in reverse order.
Program(in python):
DES Encryption-Decryption:
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)):
Practical 6 19
190210107073 3170720-IS_LAB
return bin
def bin2hex(s):
mp = {"0000": '0',
"0001": '1',
"0010": '2',
"0011": '3',
"0100": '4',
"0101": '5',
"0110": '6',
"0111": '7',
"1000": '8',
"1001": '9',
"1010": 'A',
"1011": 'B',
"1100": 'C',
"1101": 'D',
"1110": 'E',
"1111": 'F'}
hex = ""
ch = ""
ch = ch + s[i]
ch = ch + s[i + 1]
ch = ch + s[i + 2]
ch = ch + s[i + 3]
return hex
def bin2dec(binary):
Practical 6 20
190210107073 3170720-IS_LAB
binary1 = binary
decimal, i, n = 0, 0, 0
while(binary != 0):
dec = binary % 10
binary = binary//10
i += 1
return decimal
def dec2bin(num):
if(len(res) % 4 != 0):
div = len(res) / 4
div = int(div)
return res
permutation = ""
return permutation
s = ""
for i in range(nth_shifts):
s = s + k[j]
s = s + k[0]
Practical 6 21
190210107073 3170720-IS_LAB
k=s
s = ""
return k
ans = ""
for i in range(len(a)):
if a[i] == b[i]:
else:
return ans
exp_d = [32, 1, 2, 3, 4, 5, 4, 5,
6, 7, 8, 9, 8, 9, 10, 11,
Practical 6 22
190210107073 3170720-IS_LAB
2, 8, 24, 14,
32, 27, 3, 9,
Practical 6 23
190210107073 3170720-IS_LAB
pt = hex2bin(pt)
left = pt[0:32]
right = pt[32:64]
sbox_str = ""
Practical 6 24
190210107073 3170720-IS_LAB
col = bin2dec(
val = sbox[j][row][col]
left = result
if(i != 15):
return cipher_text
print("Encryption")
pt=input()
key=input()
key = hex2bin(key)
Practical 6 25
190210107073 3170720-IS_LAB
shift_table = [1, 1, 2, 2,
2, 2, 2, 2,
1, 2, 2, 2,
2, 2, 2, 1]
left = key[0:28]
right = key[28:56]
rkb = []
rk = []
rkb.append(round_key)
rk.append(bin2hex(round_key))
print("Decryption")
Practical 6 26
190210107073 3170720-IS_LAB
rkb_rev = rkb[::-1]
rk_rev = rk[::-1]
Output:
Encryption:
Decryption:
Conclusion:
DES is a symmetric block cipher that can be used to encrypt 64-bits of plaintext into 64-bits of ciphertext. The
algorithm is the same for the process of encryption as well as decryption. The only difference is that the decryption
procedure is the opposite of the encryption procedure. The algorithm goes through 16 rounds and makes it
stronger. Now, even though there are much stronger encryption algorithms available, learning about DES is still
important as it helped in the advancement of cryptography as we know it today.
Practical 6 27
190210107073 3170720-IS_LAB
Reference:
https://www.geeksforgeeks.org/data-encryption-standard-des-set-1/
Practical 6 28
190210107073 3170720-IS_LAB
Practical 7
Implement Diffie hellman key exchange method:
Diffie Hellman Key Exchange:
Diffie-Hellman key exchange is a method of digital encryption that securely exchanges cryptographic keys between
two parties over a public channel without their conversation being transmitted over the internet. The two parties
use symmetric cryptography to encrypt and decrypt their messages.
For this there are two publicly known numbers: a prime number q and integer α that is a primitive root of q.
Suppose the users A and B wants to exchange a key.
User A select a random private integer XA < q and computes public integer
YA = αXA mod q.
Similarly, user B independently selects a random private integer X B < q and computes public integer,
YB = αXB mod q
Each side keeps the X value private and makes Y value available publicly to the other side.
User A computes the key as K = (YB )XA mod q and user B computes the key as K = (YA)XB mod q.
The result is thata two sides have exchanged a secret value.
Program(in python):
from __future__ import print_function
P = int(input('Enter the value of P:'))
print('Value of P is ' + str(P))
g = int(input('Enter the value of q:'))
print('Value of q ' + str(g))
a = int(input(' \n Enter the value of a:'))
b = int(input(' Enter the value of b:'))
A = (g**a) % P
print( "\nA1 sends over to B2: " , A )
B = (g ** b) % P
print( "B2 sends over to A1: " , B )
A1SharedSecret = (B ** a) % P
print( "\nA1 Shared Secret: ", A1SharedSecret )
B2SharedSecret = (A**b) % P
Practical 7 29
190210107073 3170720-IS_LAB
Output:
Conclusion:
The Diffie-Hellman key-exchange algorithm is a secure algorithm that offers high performance, allowing two
computers to publicly exchange a shared value without using data encryption. This exchanged information is
protected with a hash function. The key itself is never exchanged by the two communicating machines, but each
machine can generate the identical shared key.
Reference:
https://www.geeksforgeeks.org/implementation-diffie-hellman-algorithm/
Practical 7 30
190210107073 3170720-IS_LAB
Practical 8
Implement RSA Encryption Decryption:
RSA algorithm:
RSA algorithm is an asymmetric cryptography algorithm. Asymmetric actually means that it works on two different
keys i.e. Public Key and Private Key. As the name describes that the Public Key is given to everyone and the Private
key is kept private.
Public Key ( n = 3127 and e = 3) and Private Key(d = 2011) Now encryption of “HI” :
Program( in Python):
Encryption:
import math
def gcd(a, h):
temp = 0
while(1):
temp = a % h
if (temp == 0):
return h
Practical 8 31
190210107073 3170720-IS_LAB
a=h
h = temp
p=5
q = 11
n = p*q
e=2
phi = (p-1)*(q-1)
while (e < phi):
if(gcd(e, phi) == 1):
break
else:
e = e+1
k=2
d = (1 + (k*phi))/e
msg = 12.0
print("Message data = ", msg)
c = pow(msg, e)
c = math.fmod(c, n)
print("Encrypted data = ", c)
Ouput:
Decryption:
import math
def gcd(a, h):
temp = 0
while(1):
temp = a % h
if (temp == 0):
return h
a=h
h = temp
p=5
q = 11
n = p*q
e=2
phi = (p-1)*(q-1)
while (e < phi):
if(gcd(e, phi) == 1):
break
else:
e = e+1
k=2
Practical 8 32
190210107073 3170720-IS_LAB
d = (1 + (k*phi))/e
msg = 12.0
Output:
Conclusion:
Reference:
https://www.geeksforgeeks.org/data-encryption-standard-des-set-1/
Practical 8 33
190210107073 3170720-IS_LAB
Practical 11
Perform various (any 3) encryption-decryption techniques With crypt tool.
1) Caesar cipher:
Encryption:
Decryption:
Practical 11 34
190210107073 3170720-IS_LAB
2) Hill cipher:
Encryption:
Decryption:
Practical 11 35
190210107073 3170720-IS_LAB
Decryption:
Practical 11 36
190210107073 3170720-IS_LAB
Practical 12
IIT Virtual Cryptography Lab :-
Practical 12 37
190210107073 3170720-IS_LAB
Practical 12 38
190210107073 3170720-IS_LAB
Practical 12 39