Data Encryption Standard
Demonstrate the Data Encryption Standard.
You are encouraged to solve this task according to the task description, using any language you may know.
Task:
Use the
- Key 0e329232ea6d0d73
- to encrypt 8787878787878787
- and display the result 0000000000000000.
Symsyn
<lang Symsyn> pc1 : 56
: 48 : 40 : 32 : 24 : 16 : 8 : 0 : 57 : 49 : 41 : 33 : 25 : 17 : 9 : 1 : 58 : 50 : 42 : 34 : 26 : 18 : 10 : 2 : 59 : 51 : 43 : 35 : 62 : 54 : 46 : 38 : 30 : 22 : 14 : 6 : 61 : 53 : 45 : 37 : 29 : 21 : 13 : 5 : 60 : 52 : 44 : 36 : 28 : 20 : 12 : 4 : 27 : 19 : 11 : 3
Pc2 : 13
: 16 : 10 : 23 : 0 : 4 : 2 : 27 : 14 : 5 : 20 : 9 : 22 : 18 : 11 : 3 : 25 : 7 : 15 : 6 : 26 : 19 : 12 : 1 : 40 : 51 : 30 : 36 : 46 : 54 : 29 : 39 : 50 : 44 : 32 : 47 : 43 : 48 : 38 : 55 : 33 : 52 : 45 : 41 : 49 : 35 : 28 : 31
P : 15
: 6 : 19 : 20 : 28 : 11 : 27 : 16 : 0 : 14 : 22 : 25 : 4 : 17 : 30 : 9 : 1 : 7 : 23 : 13 : 31 : 26 : 2 : 8 : 18 : 12 : 29 : 5 : 21 : 10 : 3 : 24
Ebit : 31
: 0 : 1 : 2 : 3 : 4 : 3 : 4 : 5 : 6 : 7 : 8 : 7 : 8 : 9 : 10 : 11 : 12 : 11 : 12 : 13 : 14 : 15 : 16 : 15 : 16 : 17 : 18 : 19 : 20 : 19 : 20 : 21 : 22 : 23 : 24 : 23 : 24 : 25 : 26 : 27 : 28 : 27 : 28 : 29 : 30 : 31 : 0
DesIP : 57
: 49 : 41 : 33 : 25 : 17 : 9 : 1 : 59 : 51 : 43 : 35 : 27 : 19 : 11 : 3 : 61 : 53 : 45 : 37 : 29 : 21 : 13 : 5 : 63 : 55 : 47 : 39 : 31 : 23 : 15 : 7 : 56 : 48 : 40 : 32 : 24 : 16 : 8 : 0 : 58 : 50 : 42 : 34 : 26 : 18 : 10 : 2 : 60 : 52 : 44 : 36 : 28 : 20 : 12 : 4 : 62 : 54 : 46 : 38 : 30 : 22 : 14 : 6
DesIPIV : 39
: 7 : 47 : 15 : 55 : 23 : 63 : 31 : 38 : 6 : 46 : 14 : 54 : 22 : 62 : 30 : 37 : 5 : 45 : 13 : 53 : 21 : 61 : 29 : 36 : 4 : 44 : 12 : 52 : 20 : 60 : 28 : 35 : 3 : 43 : 11 : 51 : 19 : 59 : 27 : 34 : 2 : 42 : 10 : 50 : 18 : 58 : 26 : 33 : 1 : 41 : 9 : 49 : 17 : 57 : 25 : 32 : 0 : 40 : 8 : 48 : 16 : 56 : 24
DesS1 : 14
: 0 : 4 : 15 : 13 : 7 : 1 : 4 : 2 : 14 : 15 : 2 : 11 : 13 : 8 : 1 : 3 : 10 : 10 : 6 : 6 : 12 : 12 : 11 : 5 : 9 : 9 : 5 : 0 : 3 : 7 : 8 : 4 : 15 : 1 : 12 : 14 : 8 : 8 : 2 : 13 : 4 : 6 : 9 : 2 : 1 : 11 : 7 : 15 : 5 : 12 : 11 : 9 : 3 : 7 : 14 : 3 : 10 : 10 : 0 : 5 : 6 : 0 : 13
S2 : 15
: 3 : 1 : 13 : 8 : 4 : 14 : 7 : 6 : 15 : 11 : 2 : 3 : 8 : 4 : 14 : 9 : 12 : 7 : 0 : 2 : 1 : 13 : 10 : 12 : 6 : 0 : 9 : 5 : 11 : 10 : 5 : 0 : 13 : 14 : 8 : 7 : 10 : 11 : 1 : 10 : 3 : 4 : 15 : 13 : 4 : 1 : 2 : 5 : 11 : 8 : 6 : 12 : 7 : 6 : 12 : 9 : 0 : 3 : 5 : 2 : 14 : 15 : 9
S3 : 10
: 13 : 0 : 7 : 9 : 0 : 14 : 9 : 6 : 3 : 3 : 4 : 15 : 6 : 5 : 10 : 1 : 2 : 13 : 8 : 12 : 5 : 7 : 14 : 11 : 12 : 4 : 11 : 2 : 15 : 8 : 1 : 13 : 1 : 6 : 10 : 4 : 13 : 9 : 0 : 8 : 6 : 15 : 9 : 3 : 8 : 0 : 7 : 11 : 4 : 1 : 15 : 2 : 14 : 12 : 3 : 5 : 11 : 10 : 5 : 14 : 2 : 7 : 12
S4 : 7
: 13 : 13 : 8 : 14 : 11 : 3 : 5 : 0 : 6 : 6 : 15 : 9 : 0 : 10 : 3 : 1 : 4 : 2 : 7 : 8 : 2 : 5 : 12 : 11 : 1 : 12 : 10 : 4 : 14 : 15 : 9 : 10 : 3 : 6 : 15 : 9 : 0 : 0 : 6 : 12 : 10 : 11 : 1 : 7 : 13 : 13 : 8 : 15 : 9 : 1 : 4 : 3 : 5 : 14 : 11 : 5 : 12 : 2 : 7 : 8 : 2 : 4 : 14
S5 : 2
: 14 : 12 : 11 : 4 : 2 : 1 : 12 : 7 : 4 : 10 : 7 : 11 : 13 : 6 : 1 : 8 : 5 : 5 : 0 : 3 : 15 : 15 : 10 : 13 : 3 : 0 : 9 : 14 : 8 : 9 : 6 : 4 : 11 : 2 : 8 : 1 : 12 : 11 : 7 : 10 : 1 : 13 : 14 : 7 : 2 : 8 : 13 : 15 : 6 : 9 : 15 : 12 : 0 : 5 : 9 : 6 : 10 : 3 : 4 : 0 : 5 : 14 : 3
S6 : 12
: 10 : 1 : 15 : 10 : 4 : 15 : 2 : 9 : 7 : 2 : 12 : 6 : 9 : 8 : 5 : 0 : 6 : 13 : 1 : 3 : 13 : 4 : 14 : 14 : 0 : 7 : 11 : 5 : 3 : 11 : 8 : 9 : 4 : 14 : 3 : 15 : 2 : 5 : 12 : 2 : 9 : 8 : 5 : 12 : 15 : 3 : 10 : 7 : 11 : 0 : 14 : 4 : 1 : 10 : 7 : 1 : 6 : 13 : 0 : 11 : 8 : 6 : 13
S7 : 4
: 13 : 11 : 0 : 2 : 11 : 14 : 7 : 15 : 4 : 0 : 9 : 8 : 1 : 13 : 10 : 3 : 14 : 12 : 3 : 9 : 5 : 7 : 12 : 5 : 2 : 10 : 15 : 6 : 8 : 1 : 6 : 1 : 6 : 4 : 11 : 11 : 13 : 13 : 8 : 12 : 1 : 3 : 4 : 7 : 10 : 14 : 7 : 10 : 9 : 15 : 5 : 6 : 0 : 8 : 15 : 0 : 14 : 5 : 2 : 9 : 3 : 2 : 12
S8 : 13
: 1 : 2 : 15 : 8 : 13 : 4 : 8 : 6 : 10 : 15 : 3 : 11 : 7 : 1 : 4 : 10 : 12 : 9 : 5 : 3 : 6 : 14 : 11 : 5 : 0 : 0 : 14 : 12 : 9 : 7 : 2 : 7 : 2 : 11 : 1 : 4 : 14 : 1 : 7 : 9 : 4 : 12 : 10 : 14 : 8 : 2 : 13 : 0 : 15 : 6 : 12 : 10 : 9 : 13 : 0 : 15 : 3 : 3 : 5 : 5 : 6 : 8 : 11
DesShifts : 1
: 1 : 2 : 2 : 2 : 2 : 2 : 2 : 1 : 2 : 2 : 2 : 2 : 2 : 2 : 1
DesHex : 0
: 0 : 0 : 0 : 0 : 0 : 0 : 1 : 0 : 0 : 1 : 0 : 0 : 0 : 1 : 1 : 0 : 1 : 0 : 0 : 0 : 1 : 0 : 1 : 0 : 1 : 1 : 0 : 0 : 1 : 1 : 1 : 1 : 0 : 0 : 0 : 1 : 0 : 0 : 1 : 1 : 0 : 1 : 0 : 1 : 0 : 1 : 1 : 1 : 1 : 0 : 0 : 1 : 1 : 0 : 1 : 1 : 1 : 1 : 0 : 1 : 1 : 1 : 1
DesC : 28 0 DesD : 28 0 DesL : 32 0 DesR : 32 0 DesL1 : 32 0 DesR1 : 32 0 DesEK : 48 0 DesK : 768 0 DesWds : 64 0
DesI : 0 DesJ : 0 DesJJ : 0xf000 DesIter : 0 DesSNum : 0 OldDesKeyW : -1 DesKeyW : 0 DesDataW : 0 DesKey = DesKeyW DesData = DesDataW K : 0 Kc = K
kprime : x'0e329232ea6d0d73'
dprime : x'8787878787878787'
| Program Starts Here
kprime deskey | Load encryption key dprime desdata | Load data to be encrypted call dodeskey | Perform key setup call encryptdes | Encrypt data desdata $s | Move encrypted data to string unpackhex $s | Unpack to display $s [] | Display stop
| End of Program
Data2Wds
63 DesJJ 7 DesI if DesI GE 0 DesData.DesI D DesJ if DesJ LE 7 and 1 D D1 D1 DesWds.DesJJ shr D 1 - DesJJ + DesJ goif endif - DesI goif endif return
Wds2Data
DesJJ DesI if DesI LE 7 DesJ if DesJ LE 7 shl D 1 if DesWds.DesJJ NE 0 + D endif + DesJJ + DesJ goif endif D DesData.DesI + DesI goif endif return
Key2Wds
63 DesJJ 7 DesI if DesI GE 0 DesKey.DesI K DesJ if DesJ LE 7 and K 1 K1 K1 DesWds.DesJJ
shr K 1
- DesJJ + DesJ goif endif - DesI goif endif return
func
DesI if DesI LE 47 Ebit.DesI rx DesR.rx DesEK.DesI + DesI goif endif * 48 DesIter DesJ DesI if DesI LE 47 + DesI DesJ IJ xor DesEK.DesI DesK.IJ DesEK.DesI + DesI goif endif DesI DesSNum if DesSNum LE 7 DesEK.DesI ss shl ss 1 + DesI + DesEK.DesI ss shl ss 1 + DesI + DesEK.DesI ss shl ss 1 + DesI + DesEK.DesI ss shl ss 1 + DesI + DesEK.DesI ss shl ss 1 + DesI + DesEK.DesI ss + DesI DesSNum DesS1x Shl DesS1x 6 + ss DesS1x DesS1.DesS1x DesHexx shl DesHexx 2 DesSNum DesWdsx shl DesWdsx 2 DesHex.DesHexx DesWds.DesWdsx 4 + DesSNum goif endif DesI if DesI LE 31 P.DesI DesJ DesWds.DesJ DesR.DesI + DesI goif endif return
DoDesKey
if DesKeyW EQ OldDesKeyW if DesJJ NE 0xf000 return endif endif DesKeyW OldDesKeyW call Key2Wds DesI if DesI LE 55 Pc1.DesI Pcx DesWds.Pcx DesC.DesI + DesI goif endif DesJJ DesI if DesI LE 15 DesC.0 DesWd DesC.1 DesC 27 DesWd DesC.27 DesD.0 DesWd DesD.1 DesD 27 DesWd DesD.27 if DesShifts.DesI EQ 2 DesC.0 DesWd DesC.1 DesC 27 DesWd DesC.27 DesD.0 DesWd DesD.1 DesD 27 DesWd DesD.27 endif DesJ if DesJ LE 47 Pc2.DesJ DesCx DesC.DesCx DesK.DesJJ + DesJJ + DesJ goif endif + DesI goif endif return
EncryptDes
Call Data2Wds DesI if DesI LE 63 DesIP.DesI DesWdsx DesWds.DesWdsx DesL.DesI + DesI goif endif DesIter if DesIter LE 15 DesR DesL1 32 call func DesJ if DesJ LE 31 xor DesL.DesJ DesR.DesJ + DesJ goif endif DesL1 DesL 32 + DesIter goif endif DesL DesR1 32 DesR DesL1 32 DesI if DesI LE 63 DesIPIV.DesI DesL1x DesL1.DesL1x DesWds.DesI + DesI goif endif
call Wds2Data return
DecryptDes
Call Data2Wds DesI if DesI LE 63 DesIP.DesI DesWdsx DesWds.DesWdsx DesL.DesI + DesI goif endif 15 DesIter if DesIter GE 0 DesR DesL1 32 call func DesJ if DesJ LE 31 xor DesL.DesJ DesR.DesJ + DesJ goif endif DesL1 DesL 32 - DesIter goif endif DesL DesR1 32 DesR DesL1 32 DesI if DesI LE 63 DesIPIV.DesI DesL1x DesL1.DesL1x DesWds.DesI + DesI goif endif call Wds2Data return
</lang>
- Output:
0000000000000000