Data Encryption Standard

Revision as of 17:21, 29 May 2017 by rosettacode>Raslbg (Created page with "{{task|Encryption}} Demonstrate the Data Encryption Standard. '''Task:''' Use the :Key 0e329232ea6d0d73 :to encrypt 8787878787878787 :an...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Demonstrate the Data Encryption Standard.

Task
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