Encryption Interoperability
openssl aes-128-cbc -in input.txt -out input_enc.txt -k mypassword -p
Runs AES 128bit CBC Mode encryption on an input.txt file. Result is written to input_enc.txt file and we use the given password. Also we didn't disable salting, so the encryption will get some salt.
So how we decrypt with MBS Plugin?
Well, we first locate the file and read it. If first 8 bytes are "Salted__", than the next 8 bytes are the salt. This is how OpenSSL adds flavor. Next we need to build key and initial vector using password, key and salt and pass them through MD5 to make them more random.
Now we can set key to AESMBS class. With passing key as string, the length of the key (16 bytes) will define that we use AES-128. We built memoryblocks for input and output and pass them Through DecryptCBC. Finally we need to remove PKCS7 padding. In result variable, we keep the result. If you encrypted text, this is the time where you can add a DefineEncoding call to mark it as UTF-8 or so.
Below you see the complete code:
dim f as FolderItem = SpecialFolder.Desktop.Child("input_enc.txt")
dim b as BinaryStream = BinaryStream.Open(f)
dim s as string = b.Read(b.Length)
dim salt as string
dim password as string = "mypassword"
dim s8 as string = leftb(s,8)
if s8 = "salted__" then
salt = midb(s,9,8)
s = midb(s,17)
end if
dim pkey as string = password + salt
dim Key as string = MD5MBS(pkey)
dim pIV as string = Key + password + salt
dim IV as string = MD5MBS(piv)
dim a as new AESMBS
if a.SetKey(key) then
dim Input as MemoryBlock = s
dim output as new MemoryBlock(input.size)
a.DecryptCBC input, input.size, iv, output
// remove padding
dim len as integer = output.Size
dim n as integer = output.Int8Value(len-1)
if n>=1 and n<=15 then
dim isPadding as Boolean = true
for i as integer = n downto 1
if output.Int8Value(len-i) <> n then
isPadding = false
end if
next
if isPadding then
len = len - n
end if
end if
dim result as string = output.StringValue(0,len)
Break
end if