Created
October 8, 2015 20:22
-
-
Save chakpongchung/fb020e39d8a93519dec9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 410, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"01010001\n", | |
"64\n", | |
"1110000011100000111000001110000011110000111100001111000011110000\n", | |
"1010101010101010101010101010101010101010101010101010101010101010\n" | |
] | |
} | |
], | |
"source": [ | |
"import binascii\n", | |
"def hextobin( hexval):\n", | |
" '''\n", | |
" Takes a string representation of hex data with\n", | |
" arbitrary length and converts to string representation\n", | |
" of binary. Includes padding 0s\n", | |
" '''\n", | |
" thelen = len(hexval)*4\n", | |
" binval = bin(int(hexval, 16))[2:]\n", | |
" while ((len(binval)) < thelen):\n", | |
" binval = '0' + binval\n", | |
" return binval\n", | |
"# test hextobin()\n", | |
"print hextobin('51')\n", | |
"\n", | |
"# # INPUT AND KEY for a2 in CS772 FALL 2015\n", | |
"# input='5500 0000 0000 0055'.replace(\" \", \"\")\n", | |
"# key='1F1F 1F1F 0F0F 0F0F'.replace(\" \", \"\")\n", | |
"\n", | |
"# INPUT AND KEY for a2 in CS772 FALL 2014\n", | |
"input=' AAAA AAAA AAAA AAAA'.replace(\" \", \"\")\n", | |
"key='E0E0 E0E0 F0F0 F0F0'.replace(\" \", \"\")\n", | |
"\n", | |
"input=hextobin(input)\n", | |
"key64=hextobin(key)\n", | |
"print len(key64)\n", | |
"\n", | |
"## test case for key64\n", | |
"# key64='00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001'.replace(\" \", \"\")\n", | |
"# # test case for ip\n", | |
"# input='0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111'.replace(\" \", \"\")\n", | |
"\n", | |
"print key64\n", | |
"print input\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 411, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"56\n", | |
"1110000011100000111000001110000011110000111100001111000011110000\n" | |
] | |
} | |
], | |
"source": [ | |
"pc_1=[ 57,49,41,33,25,17,9,\n", | |
" 1,58,50,42,34,26,18,\n", | |
" 10,2,59,51,43,35,27,\n", | |
" 19,11, 3,60,52,44,36,\n", | |
" 63,55,47,39,31,23,15,\n", | |
" 7,62,54,46,38,30,22,\n", | |
" 14,6,61,53,45,37,29,\n", | |
" 21,13, 5,28,20,12,4]\n", | |
"# testing key56 and pc_1\n", | |
"# key64=[]\n", | |
"# for i in range(64):\n", | |
"# key64.append( i )\n", | |
"\n", | |
"print len(pc_1)\n", | |
"print key64" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 412, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"key56=[]\n", | |
"for i in range(len(pc_1)):\n", | |
" key56.append( key64[pc_1[i]-1] )\n", | |
" \n", | |
"# print key56\n", | |
"# print pc_1[2]\n", | |
"# print key64[41]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 413, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"c0=key56[0:len(key56)/2]\n", | |
"d0=key56[len(key56)/2:]\n", | |
"# print c0\n", | |
"# print d0" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 414, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# len(d0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 415, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"c1=[]\n", | |
"d1=[]\n", | |
"for i in range(1,len(c0)):\n", | |
"# print i\n", | |
" c1.append(c0[i])\n", | |
" d1.append(d0[i])\n", | |
"c1.append(c0[0])\n", | |
"d1.append(d0[0]) \n", | |
"# print c1\n", | |
"# print d1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 416, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"pc_2=[\n", | |
"14,17,11,24, 1,5\n", | |
", 3,28,15, 6,21,10\n", | |
",23,19,12, 4,26,8\n", | |
",16, 7,27,20,13,2\n", | |
",41,52,31,37,47,55\n", | |
",30,40,51,45,33,48\n", | |
",44,49,39,56,34,53\n", | |
",46,42,50,36,29,32\n", | |
"]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 417, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"k1=c1+d1\n", | |
"# print k1\n", | |
"# len(k1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 418, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"key48=[]\n", | |
"for i in range(len(pc_2)):\n", | |
" key48.append( k1[pc_2[i]-1] )\n", | |
"# print key48\n", | |
"# len(key48)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 419, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"ip=[\n", | |
"58,50,42,34,26,18,10,2\n", | |
",60,52,44,36,28,20,12,4\n", | |
",62,54,46,38,30,22,14,6\n", | |
",64,56,48,40,32,24,16,8\n", | |
",57,49,41,33,25,17, 9,1\n", | |
",59,51,43,35,27,19,11,3\n", | |
",61,53,45,37,29,21,13,5\n", | |
",63,55,47,39,31,23,15,7\n", | |
"]\n", | |
"# len(ip)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 420, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# # test case for ip\n", | |
"# input='0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111'.replace(\" \", \"\")\n", | |
"# print input" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 421, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"inputAfterIP=[]\n", | |
"for i in range(len(ip)):\n", | |
" inputAfterIP.append(input[ip[i]-1])\n", | |
"# print inputAfterIP\n", | |
"# len(inputAfterIP) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 422, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"l0=inputAfterIP[:len(inputAfterIP)/2]\n", | |
"r0=inputAfterIP[len(inputAfterIP)/2:]\n", | |
"# print l0\n", | |
"# print r0\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 423, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"l1=r0\n", | |
"bst=[\n", | |
" 32,1,2,3,4,5,\n", | |
" 4,5,6,7,8,9,\n", | |
" 8,9,10,11,12,13,\n", | |
"12,13,14,15,16,17,\n", | |
"16,17,18,19,20,21,\n", | |
"20,21,22,23,24,25,\n", | |
"24,25,26,27,28,29,\n", | |
"28,29,30,31,32,1\n", | |
"]\n", | |
"# len(bst)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 424, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"E_r0=[]\n", | |
"for i in range(len(bst)):\n", | |
" E_r0.append(r0[bst[i]-1])\n", | |
"# print E_r0\n", | |
"# len(E_r0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 425, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"k1pE_r0=[]\n", | |
"for i in range(len(key48)):\n", | |
" k1pE_r0.append( int(key48[i]!=E_r0[i]) ) \n", | |
"# print k1pE_r0\n", | |
"# len(k1pE_r0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 426, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0\n", | |
"3\n", | |
"13\n", | |
"13\n", | |
"14\n", | |
"10\n", | |
"13\n", | |
"1\n" | |
] | |
} | |
], | |
"source": [ | |
"import numpy as np\n", | |
"# s1 = np.matrix('14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7;0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8;4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0;15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13')\n", | |
"# print s1.item((1,0))\n", | |
"s1=np.matrix([\n", | |
"[14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7]\n", | |
",[0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8]\n", | |
",[4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0]\n", | |
",[15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13]\n", | |
"])\n", | |
"print s1.item((1,0))\n", | |
"\n", | |
"s2=np.matrix([\n", | |
"[15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10]\n", | |
",[3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5]\n", | |
",[0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15]\n", | |
",[13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9]\n", | |
"])\n", | |
"print s2.item((1,0))\n", | |
"\n", | |
"s3=np.matrix([\n", | |
"[10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8]\n", | |
",[13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1]\n", | |
",[13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7]\n", | |
",[1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12]\n", | |
"])\n", | |
"print s3.item((1,0))\n", | |
"\n", | |
"s4=np.matrix([\n", | |
"[7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15]\n", | |
",[13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9]\n", | |
",[10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4]\n", | |
",[3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14]\n", | |
"])\n", | |
"print s4.item((1,0))\n", | |
"\n", | |
"s5=np.matrix([\n", | |
"[2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9]\n", | |
",[14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6]\n", | |
",[4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14]\n", | |
",[11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3]\n", | |
"])\n", | |
"print s5.item((1,0))\n", | |
"\n", | |
"\n", | |
"s6=np.matrix([\n", | |
" [12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11]\n", | |
",[10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8]\n", | |
",[9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6]\n", | |
",[4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13]\n", | |
"])\n", | |
"print s6.item((1,0))\n", | |
"\n", | |
"s7=np.matrix([\n", | |
" [4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1]\n", | |
",[13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6]\n", | |
",[1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2]\n", | |
",[6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12]\n", | |
"])\n", | |
"print s7.item((1,0))\n", | |
"\n", | |
"s8=np.matrix([\n", | |
" [13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7]\n", | |
",[1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2]\n", | |
",[7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8]\n", | |
",[2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11]\n", | |
"])\n", | |
"print s8.item((1,0))\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 427, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"48\n" | |
] | |
} | |
], | |
"source": [ | |
"print len(k1pE_r0)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 428, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"B=[]\n", | |
"for i in range(8):\n", | |
" B.append(k1pE_r0[6*i:6*i+6])" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 429, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[0, 0, 0, 0, 0, 0]\n", | |
"[0, 0, 0, 0, 0, 0]\n", | |
"[0, 0, 0, 0, 0, 0]\n", | |
"[0, 0, 0, 0, 0, 0]\n", | |
"[1, 1, 1, 1, 1, 1]\n", | |
"[1, 1, 1, 1, 1, 1]\n", | |
"[1, 1, 1, 1, 1, 1]\n", | |
"[1, 1, 1, 1, 1, 1]\n" | |
] | |
} | |
], | |
"source": [ | |
"for i in range(8):\n", | |
" print B[i]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 430, | |
"metadata": { | |
"collapsed": false, | |
"scrolled": true | |
}, | |
"outputs": [], | |
"source": [ | |
"sBox=[]\n", | |
"sBox.append(s1)\n", | |
"sBox.append(s2)\n", | |
"sBox.append(s3)\n", | |
"sBox.append(s4)\n", | |
"sBox.append(s5)\n", | |
"sBox.append(s6)\n", | |
"sBox.append(s7)\n", | |
"sBox.append(s8)\n", | |
"# print sBox" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 431, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"8\n", | |
"0 0\n", | |
"0 0\n", | |
"0 0\n", | |
"0 0\n", | |
"3 15\n", | |
"3 15\n", | |
"3 15\n", | |
"3 15\n" | |
] | |
} | |
], | |
"source": [ | |
"result32=''\n", | |
"print len(B)\n", | |
"for i in range(len(B)):\n", | |
" row=int(str(B[i][0])+str(B[i][-1]), 2)\n", | |
" column=int(str(B[i][1])+str(B[i][2])+str(B[i][3])+str(B[i][4]), 2)\n", | |
" print row,column\n", | |
" temp=sBox[i].item((row,column))\n", | |
" result32+=(\"{0:04b}\".format(temp))\n", | |
"# print result32\n", | |
"# len(result32)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 432, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# print l1\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 433, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"p=[16,7,20,21\n", | |
",29,12,28,17\n", | |
", 1,15,23,26\n", | |
", 5,18,31,10\n", | |
", 2,8,24,14\n", | |
",32,27,3,9\n", | |
",19,13,30,6\n", | |
",22,11,4,25]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 434, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"f=[]\n", | |
"for i in range(len(p)):\n", | |
" f.append( result32[p[i]-1] )\n", | |
"# print f " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 435, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"[1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1]\n" | |
] | |
} | |
], | |
"source": [ | |
"r1=[]\n", | |
"for i in range(len(l0)):\n", | |
" r1.append( int(l0[i]!=f[i]) ) \n", | |
"print r1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 436, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# final answer for the first around of DES\n", | |
"l1=[int(x) for x in l1]\n", | |
"# print l1\n", | |
"# print r1\n", | |
"\n", | |
"l1=[str(x) for x in l1]\n", | |
"r1=[str(x) for x in r1]\n", | |
"# print l1\n", | |
"# print r1" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 437, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# print len(l1),len(r1)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 438, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '0', '1', '1', '0', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '0', '1', '1', '1', '0', '1']\n", | |
"64\n", | |
"0xd\n", | |
"['0xf', '0xf', '0xf', '0xf', '0xf', '0xf', '0xf', '0xf', '0xf', '0x8', '0xd', '0xa', '0xf', '0xb', '0x9', '0xd']\n" | |
] | |
} | |
], | |
"source": [ | |
"# final result in hex !!!!\n", | |
"\n", | |
"print l1+r1\n", | |
"print len(l1+r1)\n", | |
"lr=l1+r1\n", | |
"result=[]\n", | |
"for x in range(len(lr)/4):\n", | |
" result.append( hex( int(''.join(lr[4*x:4*x+4]), 2) ) )\n", | |
"print hex(int(''.join( lr[60:60+4] ), 2))\n", | |
"print result" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 439, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0x0\n" | |
] | |
} | |
], | |
"source": [ | |
"print h" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 2", | |
"language": "python", | |
"name": "python2" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.9" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment