सरल प्रतिस्थापन सिफर
सरल स्थानापन्न सिफर सबसे अधिक उपयोग किया जाने वाला सिफर है और इसमें प्रत्येक सिफर पाठ चरित्र के लिए हर सादे पाठ चरित्र को प्रतिस्थापित करने का एक एल्गोरिथ्म शामिल है। इस प्रक्रिया में, सीज़र सिफर एल्गोरिथ्म की तुलना में अल्फाबेट्स को जोड़ दिया जाता है।
उदाहरण
एक साधारण स्थानापन्न सिफर की कुंजी में आमतौर पर 26 अक्षर होते हैं। एक उदाहरण कुंजी है -
plain alphabet : abcdefghijklmnopqrstuvwxyz
cipher alphabet: phqgiumeaylnofdxjkrcvstzwb
उपरोक्त कुंजी is− का उपयोग कर एक उदाहरण एन्क्रिप्शन
plaintext : defend the east wall of the castle
ciphertext: giuifg cei iprc tpnn du cei qprcni
निम्नलिखित कोड सरल प्रतिस्थापन सिफर को लागू करने के लिए एक कार्यक्रम दिखाता है -
import random, sys
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def main():
message = ''
if len(sys.argv) > 1:
with open(sys.argv[1], 'r') as f:
message = f.read()
else:
message = raw_input("Enter your message: ")
mode = raw_input("E for Encrypt, D for Decrypt: ")
key = ''
while checkKey(key) is False:
key = raw_input("Enter 26 ALPHA key (leave blank for random key): ")
if key == '':
key = getRandomKey()
if checkKey(key) is False:
print('There is an error in the key or symbol set.')
translated = translateMessage(message, key, mode)
print('Using key: %s' % (key))
if len(sys.argv) > 1:
fileOut = 'enc.' + sys.argv[1]
with open(fileOut, 'w') as f:
f.write(translated)
print('Success! File written to: %s' % (fileOut))
else: print('Result: ' + translated)
# Store the key into list, sort it, convert back, compare to alphabet.
def checkKey(key):
keyString = ''.join(sorted(list(key)))
return keyString == LETTERS
def translateMessage(message, key, mode):
translated = ''
charsA = LETTERS
charsB = key
# If decrypt mode is detected, swap A and B
if mode == 'D':
charsA, charsB = charsB, charsA
for symbol in message:
if symbol.upper() in charsA:
symIndex = charsA.find(symbol.upper())
if symbol.isupper():
translated += charsB[symIndex].upper()
else:
translated += charsB[symIndex].lower()
else:
translated += symbol
return translated
def getRandomKey():
randomList = list(LETTERS)
random.shuffle(randomList)
return ''.join(randomList)
if __name__ == '__main__':
main()
उत्पादन
जब आप ऊपर दिए गए कोड को लागू करते हैं तो आप निम्न आउटपुट देख सकते हैं -