{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "f06af5bc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%HTML\n", "" ] }, { "cell_type": "code", "execution_count": 4, "id": "b73906e7", "metadata": {}, "outputs": [], "source": [ "class PlayFire:\n", " def __init__(self,key,extra='x'):\n", " self.key = self.__verify_key(key)\n", " self.key_matrix = self.__make_matrix()\n", " self.extra = extra\n", " def __verify_key(self,key):\n", " keyy = []\n", " for i in key:\n", " if(i not in keyy):\n", " keyy.append(i)\n", " if(len(set(key))==len(key)):\n", " return key\n", " else:\n", " print(\"key Error\")\n", " def __make_matrix(self):\n", " alphanum = list(\"abcdefghijklmnopqrstuvwxyz0123456789\")\n", " key = list(self.key)\n", " xx = key+[i for i in alphanum if i not in key]\n", " mtrx = []\n", " idx = 0\n", " for i in range(6):\n", " t1 = xx[idx:idx+6]\n", " mtrx.append(t1)\n", " idx = idx+6\n", " return mtrx\n", " def find_idx(self,pair):\n", " idxs = [6,6]\n", " for i in range(6):\n", " for j in range(6):\n", " if(i == 5):\n", " i = -1\n", " if(j == 5):\n", " j = -1\n", " if(pair[0]==self.key_matrix[i][j]):\n", " idxs[0] = [i,j]\n", " if(pair[1]==self.key_matrix[i][j]):\n", " idxs[1] = [i,j]\n", " return idxs\n", " def encrypt(self,msg:str):\n", " msg = list(msg.lower())\n", " if(len(msg)%2==1):\n", " msg.append(self.extra)\n", " pairs = []\n", " for i in range(0,len(msg),2):\n", " pairs.append(msg[i:i+2])\n", " en_msg=\"\"\n", " for i in pairs:\n", " idxs = self.find_idx(i)\n", " if(idxs[0][0]==idxs[1][0]):\n", " en_m = self.key_matrix[idxs[0][0]][idxs[0][1]+1]+self.key_matrix[idxs[0][0]][idxs[1][1]+1]\n", " elif(idxs[0][1]==idxs[1][1]):\n", " \n", " en_m = self.key_matrix[idxs[0][0]+1][idxs[0][1]]+self.key_matrix[idxs[1][0]+1][idxs[1][1]]\n", " else:\n", " en_m = self.key_matrix[idxs[0][0]][idxs[1][1]]+self.key_matrix[idxs[1][0]][idxs[0][1]]\n", " en_msg += en_m\n", " return en_msg\n", " \n", " def decrypt(self,msg):\n", " msg = list(msg.lower())\n", " if(len(msg)%2==1):\n", " msg.append(self.extra)\n", " pairs = []\n", " for i in range(0,len(msg),2):\n", " pairs.append(msg[i:i+2])\n", " en_msg=\"\"\n", " for i in pairs:\n", " idxs = self.find_idx(i)\n", " if(idxs[0][0]==idxs[1][0]):\n", " en_m = self.key_matrix[idxs[0][0]][idxs[0][1]-1]+self.key_matrix[idxs[0][0]][idxs[1][1]-1]\n", " elif(idxs[0][1]==idxs[1][1]):\n", " en_m = self.key_matrix[idxs[0][0]-1][idxs[0][1]]+self.key_matrix[idxs[1][0]-1][idxs[1][1]]\n", " else:\n", " en_m = self.key_matrix[idxs[0][0]][idxs[1][1]]+self.key_matrix[idxs[1][0]][idxs[0][1]]\n", " en_msg += en_m\n", " return en_msg" ] }, { "cell_type": "code", "execution_count": 5, "id": "4b861600", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['m', 'o', 'n', 'a', 'r', 'c'],\n", " ['h', 'y', '1', '2', '3', 'b'],\n", " ['d', 'e', 'f', 'g', 'i', 'j'],\n", " ['k', 'l', 'p', 'q', 's', 't'],\n", " ['u', 'v', 'w', 'x', 'z', '0'],\n", " ['4', '5', '6', '7', '8', '9']]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pf = PlayFire(key=\"monarchy123\")\n", "pf.key_matrix" ] }, { "cell_type": "code", "execution_count": 6, "id": "7c4e1caa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'ydppny3b7u'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "msg = 'hello1234'\n", "enc = pf.encrypt(msg)\n", "enc" ] }, { "cell_type": "code", "execution_count": 7, "id": "48c8a847", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'hello1234x'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pf.decrypt(enc)" ] }, { "cell_type": "code", "execution_count": 8, "id": "62806ee1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'thismy1stdayofcollegeilearntabouteverythingandmetmyfriends'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pf.decrypt(pf.encrypt(\"thismy1stdayofcollegeilearntabouteverythingandmetmyfriends\"))" ] }, { "cell_type": "code", "execution_count": 9, "id": "a7a9907b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'rx'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pf.decrypt(pf.encrypt('r'))" ] }, { "cell_type": "code", "execution_count": null, "id": "6fe9dad9", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }