Author Topic: Encrypt and decrypt a file  (Read 285 times)

jj2007

  • Member
  • *****
  • Posts: 10544
  • Assembler is fun ;-)
    • MasmBasic
Encrypt and decrypt a file
« on: July 11, 2020, 09:16:09 AM »
To encrypt a file, drag it over the attached executable; filename.enc will be generated
To decrypt a file, drag filename.enc over the executable.
The password should be around 12 valid characters long. Spaces, tabs etc get ignored. A-Z, a-z, 0-9, /#*$&:+-?\ are valid password elements.

Is it safe? Use at your own risk, and never forget the password - I won't be able to help you :cool:

The password generates two seeds for use in two independent and pretty good PRNGs. The password also generates two offsets that are used to insert several hundred random bytes at the start and the end of the file. An attacker would have to...
- guess a dword value from the original (which is not impossible, e.g. PKxx for zip files)
- find two independent PRNG series with a period of almost 4GB that produce this dword
- do that several hundred times at the start of the *.enc file, because the position of the PKxx is not known.

IMHO it is pretty safe, but again: use at your own risk. Building requires MasmBasic 11 July 2020 :cool:

Note that the *.enc file cannot be compressed. Below a screenshot from an attempt to zip the *.enc file. While the original file compresses quite well (almost a factor 5), the encrypted version is virtually uncompressible. It is therefore recommended to zip large files first, then encrypt them.

include \masm32\MasmBasic\MasmBasic.inc
  Init
  Let esi=Qtrim$(CL$())                 ; get the file from the commandline
  .if Exist(esi)
        Let edi=Input$("Password: ", "Assembly is fun!")        ; 12 chars will be used (blanks and ! ignored)
        .if dword ptr [esi+Len(esi)-4]==Mirror$(".enc")         ; encrypted file
                Decrypt esi, edi        ; decrypt...
                ShEx eax                ; ... and show
        .else
                Encrypt esi, edi
                PrintLine "Encoded as ", eax
        .endif
  .else
        PrintLine "No commandline found: ", esi
  .endif
EndOfCode


P.S.: It's Assembly, i.e. fast - a 20MB file encrypts and decrypts in about 150 milliseconds on my trusty old Core i5 :tongue:

jj2007

  • Member
  • *****
  • Posts: 10544
  • Assembler is fun ;-)
    • MasmBasic
Re: Encrypt and decrypt a file
« Reply #1 on: July 11, 2020, 11:38:57 PM »
Update: With MasmBasic of 11 July 20 V2, Encrypt and Decrypt do not change the file's time stamp, unless you specify MbCryptTS=0