mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-23 09:38:27 +00:00
256 lines
6.6 KiB
Plaintext
256 lines
6.6 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"id": "f06af5bc",
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"text/html": [
|
||
|
"<style>.container{width:100%}</style>\n"
|
||
|
],
|
||
|
"text/plain": [
|
||
|
"<IPython.core.display.HTML object>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"%%HTML\n",
|
||
|
"<style>.container{width:100%}</style>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"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
|
||
|
}
|