Skip to content

Instantly share code, notes, and snippets.

@chakpongchung
Created October 8, 2015 16:14
Show Gist options
  • Select an option

  • Save chakpongchung/38fafeb998ff964c4b6d to your computer and use it in GitHub Desktop.

Select an option

Save chakpongchung/38fafeb998ff964c4b6d to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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