Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
5 views19 pages

SC Lab Exam Programs

The document contains multiple programs demonstrating various cryptographic techniques, including a Caesar cipher for encryption and decryption, SHA hashing functions, and conversions between binary, hexadecimal, and decimal formats. Each program is designed to perform specific tasks such as encrypting messages, generating hash values, and converting number systems. The document showcases practical implementations of these algorithms in Python.

Uploaded by

k.mediajap
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views19 pages

SC Lab Exam Programs

The document contains multiple programs demonstrating various cryptographic techniques, including a Caesar cipher for encryption and decryption, SHA hashing functions, and conversions between binary, hexadecimal, and decimal formats. Each program is designed to perform specific tasks such as encrypting messages, generating hash values, and converting number systems. The document showcases practical implementations of these algorithms in Python.

Uploaded by

k.mediajap
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

Program-1

def caesar_cipher(text, shift):

result = ""

for char in text:

if char.isupper():

result += chr((ord(char) + shift - 65) % 26 + 65)

elif char.islower():

result += chr((ord(char) + shift - 97) % 26 + 97)

else:

result += char

return result

text = "Hello, World!"

shift = 3

encrypted_text = caesar_cipher(text, shift)

print("Plain Text:",text)

print("Shift Pattern is:",shift)

print("Encrypted Text:", encrypted_text)

Program-2

import string

def caesar_cipher(text, shift, mode):

result = ""

if mode == "decrypt":

shift = -shift

for char in text:

if char.isupper():

result += chr((ord(char) + shift - 65) % 26 + 65)

elif char.islower():

# Shift the character and wrap around a-z if needed

result += chr((ord(char) + shift - 97) % 26 + 97)

else:
result += char

return result

while True:

mode = input("Would you like to encrypt or decrypt a message? (Type 'encrypt' or 'decrypt'):
").lower()

if mode not in ["encrypt", "decrypt"]:

print("Invalid option. Please enter 'encrypt' or 'decrypt'.")

continue

try:

shift = int(input("Enter the shift value (an integer): "))

except ValueError:

print("Invalid shift value. Please enter an integer.")

continue

if mode == "encrypt":

text = input("Enter the message to encrypt: ")

encrypted_text = caesar_cipher(text, shift, mode)

print("Encrypted Message:", encrypted_text)

elif mode == "decrypt":

text = input("Enter the message to decrypt: ")

decrypted_text = caesar_cipher(text, shift, mode)

print("Decrypted Message:", decrypted_text)

another = input("Do you want to encrypt/decrypt another message? (yes/no): ").lower()

if another != "yes":

print("Exiting the program.")

break

Program-3

import hashlib

text = "GeeksforGeeks"

result = hashlib.sha256(text.encode())

print("The hexadecimal equivalent of SHA256 is:")

print(result.hexdigest())
result = hashlib.sha384(text.encode())

print("\nThe hexadecimal equivalent of SHA384 is:")

print(result.hexdigest())

result = hashlib.sha224(text.encode())

print("\nThe hexadecimal equivalent of SHA224 is:")

print(result.hexdigest())

result = hashlib.sha512(text.encode())

print("\nThe hexadecimal equivalent of SHA512 is:")

print(result.hexdigest())

result = hashlib.sha1(text.encode())

print("\nThe hexadecimal equivalent of SHA1 is:")

print(result.hexdigest())

Program-4

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',

"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)

counter = (4 * (div + 1)) - len(res)

for i in range(0, counter):

res = '0' + res

return res

def permute(k, arr, n):

permutation = ""

for i in range(0, n):

permutation = permutation + k[arr[i] - 1]

return permutation

def shift_left(k, nth_shifts):

s = ""

for i in range(nth_shifts):
for j in range(1, len(k)):

s = s + k[j]

s = s + k[0]

k=s

s = ""

return k

def xor(a, b):

ans = ""

for i in range(len(a)):

if a[i] == b[i]:

ans = ans + "0"

else:

ans = ans + "1"

return ans

initial_perm = [58, 50, 42, 34, 26, 18, 10, 2,

60, 52, 44, 36, 28, 20, 12, 4,

62, 54, 46, 38, 30, 22, 14, 6,

64, 56, 48, 40, 32, 24, 16, 8,

57, 49, 41, 33, 25, 17, 9, 1,

59, 51, 43, 35, 27, 19, 11, 3,

61, 53, 45, 37, 29, 21, 13, 5,

63, 55, 47, 39, 31, 23, 15, 7]

exp_d = [32, 1, 2, 3, 4, 5, 4, 5,

6, 7, 8, 9, 8, 9, 10, 11,

12, 13, 12, 13, 14, 15, 16, 17,

16, 17, 18, 19, 20, 21, 20, 21,

22, 23, 24, 25, 24, 25, 26, 27,

28, 29, 28, 29, 30, 31, 32, 1]


per = [16, 7, 20, 21,

29, 12, 28, 17,

1, 15, 23, 26,

5, 18, 31, 10,

2, 8, 24, 14,

32, 27, 3, 9,

19, 13, 30, 6,

22, 11, 4, 25]

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]],

[[15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10],

[3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5],

[0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15],

[13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9]],

[[10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8],

[13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1],

[13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7],

[1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12]],

[[7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15],

[13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9],

[10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4],

[3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14]],

[[2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9],


[14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6],

[4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14],

[11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3]],

[[12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11],

[10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8],

[9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6],

[4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13]],

[[4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1],

[13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6],

[1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2],

[6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12]],

[[13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7],

[1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2],

[7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8],

[2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11]]]

final_perm = [40, 8, 48, 16, 56, 24, 64, 32,

39, 7, 47, 15, 55, 23, 63, 31,

38, 6, 46, 14, 54, 22, 62, 30,

37, 5, 45, 13, 53, 21, 61, 29,

36, 4, 44, 12, 52, 20, 60, 28,

35, 3, 43, 11, 51, 19, 59, 27,

34, 2, 42, 10, 50, 18, 58, 26,

33, 1, 41, 9, 49, 17, 57, 25]

def encrypt(pt, rkb, rk):

pt = hex2bin(pt)
pt = permute(pt, initial_perm, 64)

print("After initial permutation", bin2hex(pt))

left = pt[0:32]

right = pt[32:64]

for i in range(0, 16):

right_expanded = permute(right, exp_d, 48)

xor_x = xor(right_expanded, rkb[i])

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)

sbox_str = permute(sbox_str, per, 32)

result = xor(left, sbox_str)

left = result

if(i != 15):

left, right = right, left

print("Round ", i + 1, " ", bin2hex(left),

" ", bin2hex(right), " ", rk[i])

combine = left + right

cipher_text = permute(combine, final_perm, 64)

return cipher_text

pt = "123456ABCD132536"

key ="AABB09182736CCDD"

key = hex2bin(key)
keyp = [57, 49, 41, 33, 25, 17, 9,

1, 58, 50, 42, 34, 26, 18,

10, 2, 59, 51, 43, 35, 27,

19, 11, 3, 60, 52, 44, 36,

63, 55, 47, 39, 31, 23, 15,

7, 62, 54, 46, 38, 30, 22,

14, 6, 61, 53, 45, 37, 29,

21, 13, 5, 28, 20, 12, 4]

key = permute(key, keyp, 56)

shift_table = [1, 1, 2, 2,

2, 2, 2, 2,

1, 2, 2, 2,

2, 2, 2, 1]

key_comp = [14, 17, 11, 24, 1, 5,

3, 28, 15, 6, 21, 10,

23, 19, 12, 4, 26, 8,

16, 7, 27, 20, 13, 2,

41, 52, 31, 37, 47, 55,

30, 40, 51, 45, 33, 48,

44, 49, 39, 56, 34, 53,

46, 42, 50, 36, 29, 32]

left = key[0:28]

right = key[28:56]

rkb = []

rk = []

for i in range(0, 16):


left = shift_left(left, shift_table[i])

right = shift_left(right, shift_table[i])

combine_str = left + right

round_key = permute(combine_str, key_comp, 48)

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)

Program-5

from Crypto.Cipher import AES

from Crypto.Random import get_random_bytes

import base64

def pad(text):

padding_len = 16 - (len(text) % 16)

padding = chr(padding_len) * padding_len

return text + padding

def unpad(text):

padding_len = ord(text[-1])

return text[:-padding_len]

def aes_encrypt(key, plaintext):


iv = get_random_bytes(16)

cipher = AES.new(key, AES.MODE_CBC, iv)

padded_text = pad(plaintext)

encrypted_text = cipher.encrypt(padded_text.encode())

return base64.b64encode(iv + encrypted_text).decode()

def aes_decrypt(key, ciphertext):

raw_data = base64.b64decode(ciphertext)

iv = raw_data[:16]

encrypted_text = raw_data[16:]

cipher = AES.new(key, AES.MODE_CBC, iv)

decrypted_text = cipher.decrypt(encrypted_text).decode()

return unpad(decrypted_text)

key = get_random_bytes(16)

print("Generated Key (base64):", base64.b64encode(key).decode())

plaintext = input("Enter the message to encrypt: ")

ciphertext = aes_encrypt(key, plaintext)

print("Encrypted Message:", ciphertext)

decrypted_message = aes_decrypt(key, ciphertext)

print("Decrypted Message:", decrypted_message)

Program-6

from math import gcd

def RSA(p: int, q: int, message: int):

n=p*q

t = (p - 1) * (q - 1)

for i in range(2, t):

if gcd(i, t) == 1:

e=i

break

j=0

while True:

if (j * e) % t == 1:
d=j

break

j += 1

ct = (message ** e) % n

print(f"Encrypted message is {ct}")

mes = (ct ** d) % n

print(f"Decrypted message is {mes}")

RSA(p=53, q=59, message=89)

Program-7

import random

# public keys are taken

# p is a prime number

# g is a primitive root of p

p = int(input('Enter a prime number : '))

g = int(input('Enter a number : '))

class A:

def __init__(self):

# Generating a random private number selected by alice

self.n = random.randint(1, p)

def publish(self):

# generating public values

return (g**self.n)%p

def compute_secret(self, gb):

# computing secret key

return (gb**self.n)%p

class B:

def __init__(self):

# Generating a random private number selected for alice

self.a = random.randint(1, p)

# Generating a random private number selected for bob


self.b = random.randint(1, p)

self.arr = [self.a,self.b]

def publish(self, i):

# generating public values

return (g**self.arr[i])%p

def compute_secret(self, ga, i):

# computing secret key

return (ga**self.arr[i])%p

alice = A()

bob = A()

eve = B()

# Printing out the private selected number by Alice and Bob

print(f'Alice selected (a) : {alice.n}')

print(f'Bob selected (b) : {bob.n}')

print(f'Eve selected private number for Alice (c) : {eve.a}')

print(f'Eve selected private number for Bob (d) : {eve.b}')

# Generating public values

ga = alice.publish()

gb = bob.publish()

gea = eve.publish(0)

geb = eve.publish(1)

print(f'Alice published (ga): {ga}')

print(f'Bob published (gb): {gb}')

print(f'Eve published value for Alice (gc): {gea}')

print(f'Eve published value for Bob (gd): {geb}')

# Computing the secret key

sa = alice.compute_secret(gea)

sea = eve.compute_secret(ga,0)

sb = bob.compute_secret(geb)

seb = eve.compute_secret(gb,1)

print(f'Alice computed (S1) : {sa}')


print(f'Eve computed key for Alice (S1) : {sea}')

print(f'Bob computed (S2) : {sb}')

print(f'Eve computed key for Bob (S2) : {seb}')

Program-8

from Crypto.PublicKey import RSA

from Crypto.Signature import pkcs1_15

from Crypto.Hash import SHA256

from Crypto.Random import get_random_bytes

# Generate RSA keys

key = RSA.generate(2048)

private_key = key.export_key()

public_key = key.publickey().export_key()

# Save the private and public keys to files

with open('private.pem', 'wb') as f:

f.write(private_key)

with open('public.pem', 'wb') as f:

f.write(public_key)

# Function to sign data

def sign_message(message, private_key):

# Import the private key

key = RSA.import_key(private_key)

# Create a hash of the message

h = SHA256.new(message.encode())

# Sign the hash

signature = pkcs1_15.new(key).sign(h)

return signature

# Function to verify signature

def verify_signature(message, signature, public_key):

# Import the public key

key = RSA.import_key(public_key)

# Create a hash of the message


h = SHA256.new(message.encode())

try:

# Verify the signature

pkcs1_15.new(key).verify(h, signature)

return True

except (ValueError, TypeError):

return False

# Example usage

if __name__ == "__main__":

message = "This is a secret message."

# Sign the message

signature = sign_message(message, private_key)

print(f"Signature: {signature.hex()}")

# Verify the signature

is_valid = verify_signature(message, signature, public_key)

print(f"Signature valid: {is_valid}")

Program-9

import hashlib

import os

import socket

import ssl

import base64

from cryptography.fernet import Fernet

from getpass import getpass

# Sample list of known malicious app hashes

known_malicious_apps = [

"5d41402abc4b2a76b9719d911017c592", # example hash of a malicious app

# Function to scan installed apps for malicious software

def scan_for_malicious_apps(app_list):

malicious_apps = []
for app in app_list:

app_hash = hashlib.md5(app.encode()).hexdigest()

if app_hash in known_malicious_apps:

malicious_apps.append(app)

return malicious_apps

# Function to generate a key for encryption

def generate_key():

return Fernet.generate_key()

# Function to encrypt data

def encrypt_data(data, key):

fernet = Fernet(key)

encrypted_data = fernet.encrypt(data.encode())

return encrypted_data

# Function to decrypt data

def decrypt_data(encrypted_data, key):

fernet = Fernet(key)

decrypted_data = fernet.decrypt(encrypted_data).decode()

return decrypted_data

# Function to monitor network traffic

def monitor_network_traffic():

# Simulating network traffic monitoring (For actual implementation, use libraries like scapy)

print("Monitoring network traffic...")

# Function to establish a secure connection

def secure_connection(host, port):

context = ssl.create_default_context()

with socket.create_connection((host, port)) as sock:

with context.wrap_socket(sock, server_hostname=host) as ssock:

print(ssock.version())

# Function to implement user authentication

def authenticate_user(username, password, stored_hash):

password_hash = hashlib.sha256(password.encode()).hexdigest()
return password_hash == stored_hash

# Sample usage

if __name__ == "__main__":

# Part 1: Scan for malicious apps

print("=== Part 1: Scan for Malicious Apps ===")

installed_apps = ["app1", "malicious_app"]

malicious_apps_found = scan_for_malicious_apps(installed_apps)

if malicious_apps_found:

print("Malicious apps found:", malicious_apps_found)

else:

print("No malicious apps found.")

# Part 2: Secure data storage

print("\n=== Part 2: Secure Data Storage ===")

key = generate_key()

sensitive_data = "This is a sensitive information"

encrypted_data = encrypt_data(sensitive_data, key)

print("Sensitive data:", sensitive_data)

print("Encrypted data:", encrypted_data)

decrypted_data = decrypt_data(encrypted_data, key)

print("Decrypted data:", decrypted_data)

# Part 3: Monitor network traffic

print("\n=== Part 3: Monitor Network Traffic ===")

monitor_network_traffic()

# Part 4: Establish a secure connection

print("\n=== Part 4: Establish Secure Connection ===")

secure_connection("www.example.com", 443)

# Part 5: User authentication

print("\n=== Part 5: User Authentication ===")

username = input("Enter username: ")

password = getpass("Enter password: ")

stored_hash = hashlib.sha256("secure_password".encode()).hexdigest()
if authenticate_user(username, password, stored_hash):

print("Authentication successful.")

else:

print("Authentication failed.")

You might also like