Recent

Author Topic: AES-128 ECB decrypt example  (Read 1815 times)

CC

  • Full Member
  • ***
  • Posts: 149
AES-128 ECB decrypt example
« on: January 29, 2021, 02:27:27 am »
Hi,

as the title says it.
I have looked around but I could not find anything truly useful.

lainz

  • Hero Member
  • *****
  • Posts: 4470
    • https://lainz.github.io/
Re: AES-128 ECB decrypt example
« Reply #1 on: January 29, 2021, 03:53:02 am »
In other words Rijndael.

https://wiki.freepascal.org/DCPcrypt

Check that package, it has useful demos.

trev

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2023
  • Former Delphi 1-7, 10.2 user
Re: AES-128 ECB decrypt example
« Reply #2 on: January 29, 2021, 03:54:50 am »
You didn't look very far... this post for example.

CC

  • Full Member
  • ***
  • Posts: 149
Re: AES-128 ECB decrypt example
« Reply #3 on: January 29, 2021, 12:31:55 pm »
I have spent quite a few hours on this before asking and I did find the exact links provided here. Just figured that copy-pasting an example would be the least time consuming help. Faster then looking at my code. But here it is anyway. I know the format  the result should be, but it currently is gibberish.

The input length is 87.

Code: Pascal  [Select][+][-]
  1. function TForm1.AES128_ECB_Decrypt(AString, aKey: string): string;
  2. var
  3.   inData  : TBytes;
  4.   outData : TBytes;
  5.   StreamSize: Int64;
  6.   KeySizeInBytes, BlockSize: integer;
  7.   inStream,outStream: TStringStream;   //inStream
  8. begin
  9.   inStream:= TStringStream.Create(AString);
  10.   StreamSize:=  inStream.Size;
  11.   outStream:= TStringStream.Create;
  12.    try
  13.      KeySizeInBytes:= 16;
  14.      BlockSize:= KeySizeInBytes;
  15.      SetLength(inData, BlockSize);
  16.      SetLength(outData, BlockSize);
  17.      //AES_Cipher := TDCP_rijndael.Create(nil); // already exists
  18.      AES_Cipher.Init(aKey , 128, nil );
  19.  
  20.      While StreamSize > 0 do
  21.      begin
  22.        inStream.ReadBuffer(inData[0], BlockSize);
  23.        AES_Cipher.DecryptECB(inData[0], outData[0]);
  24.        outStream.WriteBuffer(outData[0], BlockSize);
  25.        Log(inData);
  26.        Log(outData);
  27.        Dec(StreamSize, BlockSize);
  28.        if StreamSize < KeySizeInBytes then  // Last block less then key size
  29.        begin
  30.           BlockSize:= StreamSize;
  31.           SetLength(inData, BlockSize);
  32.           SetLength(outData, BlockSize);
  33.        end;
  34.      end;
  35.      result:= outStream.DataString;
  36.    finally
  37.      inStream.Free;
  38.      outStream.Free;
  39.    end;
  40. end;                                

Result:
Quote
??M??.?I???RM?4?(%?=?6????ro?Id??m
??)\??
NO[??5??.????܊??r>?w𷋊xլ?k
« Last Edit: January 29, 2021, 01:10:13 pm by CC »

CC

  • Full Member
  • ***
  • Posts: 149
Re: AES-128 ECB decrypt example
« Reply #4 on: January 29, 2021, 08:17:45 pm »
I still do not see what is wrong with the above code, but I got it working with mORMot lib SynCrypto.TAESECB.
It is higher level solution, only few lines of code to use it. Base64 decoding may be necessary  first though.
« Last Edit: January 29, 2021, 11:25:08 pm by CC »

 

TinyPortal © 2005-2018