Python/cryptography/playfire.ipynb
Bibekananda Hati 27332fa728 cryptography
2024-11-20 22:52:43 +05:30

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
}