![]() |
Rijndael DEC 5.2 und Cryptography von Visual Studio
Moin,
wir wollen Loginpasswörter die in einer MSSQL gespeichert sind, ver- und entschlüsseln sowohl in XE6 mit DEC 5.2 und Visual Studio 2013 damit wir das Anmeldefenster bauen können. Nun ist es so, dass wir dabei nicht auf die selben Ergebnisse kommen :( Code Visual Studio
Code:
Key: 12345678 (encryptionKey)
public static string EncryptString(string stringToEncrypt,string encryptionKey)
{ string encrypted = String.Empty; byte[] key = Encoding.Unicode.GetBytes(encryptionKey); RijndaelManaged RMCrypto = new RijndaelManaged(); 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(); } Wert: test (stringToEncrypt) Ergebnis: 1iJosVDlt3OJZeMtfWhulQ==
Delphi-Quellcode:
KEY : 12345678 (wsKey)
with TCipher_Rijndael.Create do
begin try m1.Lines.Add('KEY : '+ wsKey); m1.Lines.Add('Text : '+ wsString); SetLength(vKEY,16); setlength(vIV,16); vKey := TEncoding.Unicode.GetBytes(wsKey); vIv := TEncoding.Unicode.GetBytes(wsKey); Init(vkey, 16, vKey, 16); Mode := cmCBCx; Data := EncodeBinary(wsString, TFormat_MIME64); m1.Lines.Add('Data : '+ Data + ' '+inttostr(length(data))); finally Free; end; end; Text : test (wsString) Data : 8jnglg== Wir haben hier bewusst auf Hash und Salt verzichte um erstmal eine gemeinsame Basis zu finden. Hat jemand dazu eine Idee??? |
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
Ja, kommt so häufig vor, daß sich es sich fast als FAQ eignet:
DEC-Modus cmCBCx ist nicht standard. Zitat: Cipher Block Chainung, with CFB8 padding of truncated final block |
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
Zitat:
|
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
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. |
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
Zitat:
zu 2. ECB
Code:
Nachdem wir es auf cmECBx in Delphi umgestellt haben bekommen wir die Meldung: Message length for cmECBx must be a multiple of 16 bytes
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(); } |
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
gelöscht
|
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
Zitat:
|
AW: Rijndael DEC 5.2 und Cryptography von Visual Studio
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); } |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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