Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi AES + HMAC: wie mache ich das im Praxis (https://www.delphipraxis.net/206700-aes-hmac-wie-mache-ich-das-im-praxis.html)

myicq 20. Jan 2021 08:35

AES + HMAC: wie mache ich das im Praxis
 
Hallo alle,

ich möchte gern eine String veschlüßeln, und zwar so das es nicht möglich ist teile davon zu lesen wenn mein Base64-Kodierter string geändert wird. Ich meine, von was ich lesen kann, die kombination AES+HMAC dafür ist.

Ich verwende zZt "syncrypto" (mORMrt/Synopse), aber bin für alles offen.

Problem heute / beispiel:

ich haben eine Cleartext, zB
Code:
The cryptographic feature
Das laufe ich durch
Code:
TAESCBC.SimpleEncrypt
, und mache eine Base64.

Ergebniss zB
Code:
73+7vfYHSb0eGY6NK2Mw4DYJah4vgzkvJGNKQee3urXFjIWfUQ42EefxSjSupEzx
Jetzt Modifiziere ich mein Base64-tezt in zB
Code:
99+7vfYHSb0eGY6NK2Mw4DYJah4vgzkvJGNKQee3urXFjIWfUQ42EefxSjSupEzx
ich kann jetzt mit gleicher Passwort TEILE der Cleartext lesen, zB

Code:
XXXe cryptographic feature
Meine gedanke: kann ich irgendwie verhindern das mein Base64 modifiziert ist ?

Klaus01 20. Jan 2021 08:47

AW: AES + HMAC: wie mache ich das im Praxis
 
.. wenn Du den verschlüsselten Text (AES) nach Base64 konvertierst
- dann diesen Base64 Text änderst
diese Änderung wieder decodierst
entschlüsseln sollte dann nicht möglich sein.

Auf der Basis von DEC6.0
Delphi-Quellcode:
procedure TForm1.BtnEncryptClick(Sender: TObject);
var
  AESCipher: TCipher_AES;
begin
  AESCipher := TCipher_AES.Create;
  try
    AESCipher.Mode := cmCBCx;
    AESCipher.Init(fKey);
    cipherText.Text := TNetEncoding.Base64.encode(AESCipher.EncodeStringToString(plainText.Text));
  finally
    AESCipher.Free;
  end;
end;

procedure TForm1.BtnDecryptClick(Sender: TObject);
var
  AESCipher: TCipher_AES;
begin
  AESCipher := TCipher_AES.Create;
  try
    AESCipher.Mode := cmCBCx;
    AESCipher.Init(fKey);
    plainText.Text:= AESCipher.DecodeStringToString(TNetEncoding.Base64.Decode(cipherText.Text));
  finally
    AESCipher.Free;
  end;
end;

Grüße
Klaus

mytbo 20. Jan 2021 17:12

AW: AES + HMAC: wie mache ich das im Praxis
 
Wenn du die freie Wahl der Methode hast, verwende am besten höhere Funktionen aus den mORMot Libraries.
Delphi-Quellcode:
uses
  SynCommons, SynCrypto, SynZip;

var
  s: String;
  sBase64: RawByteString;
begin
  s := 'The cryptographic feature';
  sBase64 := BinToBase64(AESSHA256(CompressString(s), StringToUTF8('meinPW'), True));
  ShowMessage(sBase64);

  s := UnCompressString(AESSHA256(Base64ToBin(sBase64), StringToUTF8('meinPW'), False));
  if s <> '' then
    ShowMessage(s)
  else
    ShowMessage('Da ging etwas schief!');
Bis bald...
Thomas

myicq 20. Jan 2021 18:50

AW: AES + HMAC: wie mache ich das im Praxis
 
Zitat:

Zitat von mytbo (Beitrag 1481293)
Wenn du die freie Wahl der Methode hast, verwende am besten höhere Funktionen aus den mORMot Libraries.
[/DELPHI]

Bis bald...
Thomas

Danke dafür. Ich mußte eine GUID an die Daten zufügen, da sonnst das gleiche Ergebniss als Base64 kam (inputA=>outputA).

Ich verstehe halbwegs das mit Zip, aber, ich bin immer noch neugierig wie ich mit zB HMAC_SHA256 umgehe (auch aus SynCrypto). Habe keine code online gefunden.

Danke für die Hilfe so weit!

Alter Mann 20. Jan 2021 19:23

AW: AES + HMAC: wie mache ich das im Praxis
 
Hilft das hier:

HMAC


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz