2017-06-27 3 views
-1

Ich habe nur einen Schlüssel und einen Wert erhalten, der mit AES verschlüsselt ist. Ich muss das jetzt entschlüsseln und den Wert daraus abrufen. Jedoch haben alle Proben, die ich online gefunden habe, andere Eigenschaften zum Entschlüsseln (Salz, IV, ...)AES128 Entschlüsselung in C#

Ich habe diese Website online gesehen http://aes.online-domain-tools.com/ und ich bin in der Lage, es als eine Binärdatei zu entschlüsseln.

aber dies in C# scheint scheint nicht für mich arbeiten.

Kann mir jemand eine einfache Möglichkeit zur Entschlüsselung von AES_128 in C# mit nur dem verschlüsselten Wert und einem Schlüssel zur Verfügung stellen?

bearbeiten

  1. die IV aus dem Schlüssel abrufen:

    Key = System.Text.Encoding.ASCII.GetBytes(DecryptionConstants.AES_KEY); 
    using (Aes aesAlg = Aes.Create()) 
    { 
        // Convert Key to bytes and pass into AES 
        aesAlg.Key = Convert.FromBase64String(DecryptionConstants.AES_KEY); 
        IV = new byte[aesAlg.BlockSize/8]; 
    
        var hexKey = BitConverter.ToString(IV); 
        IV = StringToByteArray("a2 26 cb 78 e2 cb 26 cb e7 c7 f0 bc c7 7b bd 9d"); 
    
    } 
    
  2. Entschlüsseln

    byte[] EncryptedBytes = Convert.FromBase64String(text); 
    
    //Setup the AES provider for decrypting.    
    AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider 
    { 
        Key = Key, 
        IV = this.IV, 
        BlockSize = 128, 
        KeySize = 256, 
        Padding = PaddingMode.None, 
        Mode = CipherMode.CBC,     
    }; 
    
    var cryptoTransform = aesProvider.CreateDecryptor(aesProvider.Key, aesProvider.IV); 
    
    var DecryptedBytes = cryptoTransform.TransformFinalBlock(EncryptedBytes, 8, EncryptedBytes.Length-8); 
    

Dies führt zu einem Byte-Array, das in keiner Weise sein kann, zurück zu der Saite, die ich habe Setzen Sie ein.

+0

auf dem Link Suchen Sie in der Frage geschickt, sind die IV wahrscheinlich die ersten 16 Bytes des Datenblockes. Bitte auch ausarbeiten, was du schon probiert hast und so etwas Code. – quinz

+0

Danke für die Antwort, ich habe die Frage aktualisiert. – Patrick

+1

@Patrick Site, die Sie verwenden, hat viele Möglichkeiten der Verschlüsselung und Entschlüsselung. Welche Optionen hast du benutzt? Haben Sie versucht, diese Optionen in dem Code zu replizieren, den Sie von irgendwo kopiert haben? –

Antwort

0

Mit Ihren Daten sollten Sie die IV, wahrscheinlich 16 Nullen oder die ersten 16 Bytes der Daten, und die CipherMode, EZB, CBC oder so schätzen.

Dies ist eine kleine Funktion, die ich zu verschlüsseln verwenden, um/entschlüsseln:

public static byte[] EncryptAES(byte[] message, byte[] key, bool doEncryption) 
    { 
     try 
     { 
      Aes aes = new AesManaged(); 
      aes.Key = key; 
      aes.IV = new byte[16]; 
      aes.Mode = CipherMode.CBC; 
      aes.Padding = PaddingMode.None; 

      ICryptoTransform cipher; 

      if (doEncryption == true) 
       cipher = aes.CreateEncryptor(); 
      else 
       cipher = aes.CreateDecryptor(); 

      return cipher.TransformFinalBlock(message, 0, message.Length); 
     } 
     catch(Exception) 
     { 
      return null; 
     } 
    } 
+0

Wenn ich einfach meine Nachricht umwandelte, bekam ich einen Fehler, dass mein Byte-Array nicht die richtige Größe hat (264) statt (256) – Patrick

+0

@Patrick die Nachricht muss ein Vielfaches der Blockgröße (16 Byte) sein. Versuchen Sie, mit Nullen zu puffern –

Verwandte Themen