AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Rijndael DEC 5.2 und Cryptography von Visual Studio
Thema durchsuchen
Ansicht
Themen-Optionen

Rijndael DEC 5.2 und Cryptography von Visual Studio

Ein Thema von TheProfi · begonnen am 27. Nov 2014 · letzter Beitrag vom 27. Nov 2014
Antwort Antwort
Benutzerbild von TheProfi
TheProfi

Registriert seit: 30. Mai 2005
Ort: Emden
42 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Rijndael DEC 5.2 und Cryptography von Visual Studio

  Alt 27. Nov 2014, 12:10
Ihr müßt erst einmal herausbekommen, was eigentlich auf VS-Seite verwendet wird. Also

1. Schlüsselgröße: 128,192, oder 256 Bit

2. Betriebmodus (ECB, CBC, CTR, CFB ...).

3. IV (Initialisierungsvektoren falls nicht ECB)

4. Bei ECB und CBC müssen die Textlängen ein Vielfaches von 16 Bytes sein, sonst wird Padding verwendet (Welches?). Hier ist der Nicht-Standard von DEC: die ganzen 16-Bytesblocks wird CBC verwendet, für den Rest CFB8.

Möglich Lösungen: Da DEC keinen CTR-Modus kann, könntet ihr zB immer CFB8 verwenden. Oder ein PKCS7-Padding auf VS-Seite, das auf DEC-Seite manuell entfernt wird.

Auf jeden Fall müssen die Punkte 1 und 3 geklärt werden.

Edit: Übrigens ist '12345678' (wahrscheinlich) kein gültiger Schlüssel, sondern der wird (??) via Key-Derivation-Function/Hash aus '12345678' erzeugt.
zu 1. 256 Bit
zu 2. ECB

Code:
        public static string EncryptString(string stringToEncrypt,string encryptionKey)
        {
            string encrypted = String.Empty;
            byte[] key = Encoding.Unicode.GetBytes(encryptionKey);

            RijndaelManaged RMCrypto = new RijndaelManaged();      
            RMCrypto.Mode = CipherMode.ECB;
            RMCrypto.KeySize = 256;
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, RMCrypto.CreateEncryptor(key, key), CryptoStreamMode.Write);

            byte[] encryptedString = Encoding.ASCII.GetBytes(stringToEncrypt);
            cs.Write(encryptedString, 0, encryptedString.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray());
            ms.Close();
            cs.Close();
        }
Nachdem wir es auf cmECBx in Delphi umgestellt haben bekommen wir die Meldung: Message length for cmECBx must be a multiple of 16 bytes
Georg Reimann
------------------------------------------------------
Sicher ist nur eines, dass nichts sicher ist...
  Mit Zitat antworten Zitat
Dawn87

Registriert seit: 15. Feb 2007
Ort: Lüdenscheid
189 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Rijndael DEC 5.2 und Cryptography von Visual Studio

  Alt 27. Nov 2014, 12:14
gelöscht

Geändert von Dawn87 (27. Nov 2014 um 12:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Rijndael DEC 5.2 und Cryptography von Visual Studio

  Alt 27. Nov 2014, 12:32
Nachdem wir es auf cmECBx in Delphi umgestellt haben bekommen wir die Meldung: Message length for cmECBx must be a multiple of 16 bytes
Das hört sich ganz danach an, als wenn du dich da selbst um das Padding kümmern musst. Ganz nebenbei solltet ihr fals es möglich ist, nicht ECB verwenden, denn das ist der unsicherste Modus.
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von TheProfi
TheProfi

Registriert seit: 30. Mai 2005
Ort: Emden
42 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Rijndael DEC 5.2 und Cryptography von Visual Studio

  Alt 27. Nov 2014, 13:54
Reicht es eventuell aus wenn man Passwort einfach nur als HASH speichert?
Dies läst sich mit VS und Delphi einfach umsetzen.

Delphi-Quellcode:
   wsString := 'test';
   wsKey := '123456';
   try
     Hash := THash_SHA256.Create; //var Hash : TDECHash;
     vKey := TEncoding.Unicode.GetBytes(wsKey);
     m1.Lines.Add('Hash : ' + Hash.CalcBinary(wsstring+wskey, TFormat_MIME64));
   finally
     Hash.Free;
   end;
Code:
       public static string GenerateHashWithSalt(string password,string key)
        {
            string sHashWithSalt = password + key;
            byte[] saltedHashBytes = Encoding.UTF8.GetBytes(sHashWithSalt);
            System.Security.Cryptography.HashAlgorithm algorithm = new System.Security.Cryptography.SHA256Managed();
            byte[] hash = algorithm.ComputeHash(saltedHashBytes);
            return Convert.ToBase64String(hash);
        }
Georg Reimann
------------------------------------------------------
Sicher ist nur eines, dass nichts sicher ist...
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz