Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Global variables
- state = [None] * 256
- p = q = None
- def setKey(key):
- ##RC4 Key Scheduling Algorithm
- global p, q, state
- state = [n for n in range(256)]
- p = q = j = 0
- for i in range(256):
- if len(key) > 0:
- j = (j + state[i] + key[i % len(key)]) % 256
- else:
- j = (j + state[i]) % 256
- state[i], state[j] = state[j], state[i]
- def byteGenerator():
- ##RC4 Pseudo-Random Generation Algorithm
- global p, q, state
- p = (p + 1) % 256
- q = (q + state[p]) % 256
- state[p], state[q] = state[q], state[p]
- return state[(state[p] + state[q]) % 256]
- def encrypt(key,inputString):
- ##Encrypt input string returning a byte list
- setKey(string_to_list(key))
- return [ord(p) ^ byteGenerator() for p in inputString]
- def decrypt(inputByteList):
- ##Decrypt input byte list returning a string
- return "".join([chr(c ^ byteGenerator()) for c in inputByteList])
- def intToList(inputNumber):
- ##Convert a number into a byte list
- inputString = "{:02x}".format(inputNumber)
- return [(inputString[i:i + 2], 16) for i in range(0, len(inputString), 2)]
- def string_to_list(inputString):
- ##Convert a string into a byte list
- return [ord(c) for c in inputString]
- loop = 1
- while loop == 1: #simple loop to always bring the user back to the menu
- print("RC4 Encryptor/Decryptor")
- print
- print("Please choose an option from the below menu")
- print
- print("1) Encrypt")
- print("2) Decrypt")
- print
- choice = input("Choose your option: ")
- choice = int(choice)
- if choice == 1:
- key = input("Enter Key: ")
- inputstring = input("enter plaintext: ")
- print(encrypt(key, inputstring))
- elif choice == 2:
- key = input("Enter Key: ")
- ciphertext = input("enter plaintext: ")
- print(decrypt(intToList(ciphertext)))
- elif choice == 3:
- #returns the user to the previous menu by ending the loop and clearing the screen.
- loop = 0
- else:
- print ("please enter a valid option") #if any NUMBER other than 1, 2 or 3 is entered.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement