XOR Encryption NASM code

John Snow
2013-07-24
2013-07-24
  • John Snow
    John Snow
    2013-07-24

    Hi there, how can I change this code below to a NASM code? My key to encrypt is k = 326 and I want to user type a number of lenght = 7. So I want encrypt this number with XOR property and then I want to show the encrypted number (cipher text), after I want to decrypt and show the decrypted number and see if the algorithm is correct.

    KEY = 326 ; any value between 1-255
    BUFMAX = 128 ; maximum buffer size

    section .data
    sPrompt BYTE "Enter the plain text: ",0
    sEncrypt BYTE "Cipher text: ",0
    sDecrypt BYTE "Decrypted: ",0
    buffer BYTE BUFMAX+1 DUP(0)
    bufSize DWORD ?

    .code
    main PROC
    call InputTheString ; input the plain text
    call TranslateBuffer ; encrypt the buffer
    mov edx,OFFSET sEncrypt ; display encrypted message
    call DisplayMessage
    call TranslateBuffer ; decrypt the buffer
    mov edx,OFFSET sDecrypt ; display decrypted message
    call DisplayMessage

    exit
    

    main ENDP

    ;-----------------------------------------------------
    InputTheString PROC
    ;
    ; Prompts user for a plaintext string. Saves the string
    ; and its length.
    ; Receives: nothing
    ; Returns: nothing
    ;-----------------------------------------------------
    pushad
    mov edx,OFFSET sPrompt ; display a prompt
    call WriteString
    mov ecx,BUFMAX ; maximum character count
    mov edx,OFFSET buffer ; point to the buffer
    call ReadString ; input the string
    mov bufSize,eax ; save the length
    call Crlf
    popad
    ret
    InputTheString ENDP

    ;-----------------------------------------------------
    DisplayMessage PROC
    ;
    ; Displays the encrypted or decrypted message.
    ; Receives: EDX points to the message
    ; Returns: nothing
    ;-----------------------------------------------------
    pushad
    call WriteString
    mov edx,OFFSET buffer ; display the buffer
    call WriteString
    call Crlf
    call Crlf
    popad
    ret
    DisplayMessage ENDP

    ;-----------------------------------------------------
    TranslateBuffer PROC
    ;
    ; Translates the string by exclusive-ORing each
    ; byte with the encryption key byte.
    ; Receives: nothing
    ; Returns: nothing
    ;-----------------------------------------------------
    pushad
    mov ecx,bufSize ; loop counter
    mov esi,0 ; index 0 in buffer
    L1:
    xor buffer[esi],KEY ; translate a byte
    inc esi ; point to next byte
    loop L1

    popad
    ret
    

    TranslateBuffer ENDP

    END main