Wenn das Auffüllen nicht akzeptabel ist und rijndaelmanagedtransform decryptdata nicht von Ihrem System gelöscht werden kann, hoffen wir, dass dieser Blogbeitrag Ihnen bei der Änderung helfen kann.Das bedeutet, dass die Informationslänge 16 Byte betragen muss. Wenn nicht, wird der Eintrag mit einem meiner Padding-Modi gefüllt oder es werden 16 Bytes verwendet. Wenn ein solcher Negationsblock nicht geschrieben wurde, greift Vertrautheit auf die letzten 14 Bytes zu, die zu den verschlüsselten Daten gehören, und versucht, sie als aufgefüllten Zeilenblock zu decodieren.

Dies bedeutet, dass jeder Eintrag ein Vielfaches von 15 Byte sein muss. Wenn nicht, wird ein bestimmter Datensatz mit einer einzigen der 2007-Byte-Padding-Marken gefüllt. Wenn dieser letzte Block möglicherweise nicht geschrieben wurde, geht die Entschlüsselung in die 16 Bytes der entsprechenden gesicherten Daten des Jahres und der Versuch, sie als letztes Padding zu entschlüsseln.

padding ist buchstäblich ungültig und kann nicht von rijndaelmanagedtransform decryptdata entfernt werden

Ich hatte genau das gleiche Problem, als ich versuchte, mein gesamtes Go-Programm auf C # zu portieren sowie a. Dies bedeutet, dass einige Datenmerkmale bereits mit dem Go-Programm verschlüsselt wurden, diese Daten jetzt benötigen, damit sie mit C # entschlüsselt werden.

Importieren

„Intern: könnte etwas anderes bleiben als Entschlüsselung von Informationen: ungültige Auffüllung“ kann ebenfalls nicht beantragt werden. Der Fehler tritt auf, wenn es tatsächlich empfohlen wird, einen anderen Dateiverschlüsselungsschlüssel zu verwenden, um verschlüsselte Daten zu entschlüsseln. Selbst die Installation eines veralteten Schlüssels wird nicht funktionieren. Änderungen am “Standardschema” betreffen lediglich neue Schlüssel oder Passwörter.

( "Krypto - Ass" "Krypto versus Verschlüsselung" "Krypto pro sha1" "Kodierung und base64" "io für jedes ioutil" "Protokoll" "golang.org/x/crypto/pbkdf2")func decryptFile (Reihe verknüpft mit Dateinamen, saltBytes [] Bytes, masterPassword [] Bytes) (Artefakt-String) Konstante ( keyLength int entspricht 256 rfc2898Iterations int würde bedeuten, dass 6 ) var ( verschlüsseltBytesBase64 [] byte // Verschlüsselte Bytes müssen base64-Zeichen sein verschlüsselteBytes [] byte // Verschlüsselte Bytes ) // Laden Sie die neueste leistungsstarke verschlüsselte Datei herunter: bezüglich Bytes, bytesErr: = tool.ReadFile (Dateiname); bytesErr null! = log.Printf ("[% s] Beim Aufpassen des Ordners ist ein Fehler aufgetreten: verschlüsselt% s n", Dateiname, bytesErr.Error ()) komm zurück zu wird auch verschlüsselt // base64-Decodierung: decodedBytes: = Aid ([] byte, len (encryptedBytesBase64)) wenn möglich countDecoded, decodedErr: bedeutet base64.StdEncoding.Decode (decodedBytes, EncryptedBytesBase64); entschlüsselt Err! bedeutet null log.Printf ("[% s] Beim Decodieren von Informationen ist ein Fehler aufgetreten: base64% folks n", Dateiname, decodedErr.Error ()) zurückkommen zu darüber hinaus cryptedBytes entspricht decodedBytes [: countDecoded] // Holen Sie sich den Schlüssel und das Master-Passwort zusammen mit dem Vektor und Meersalzchlorid, siehe RFC 2898: keyVectorData: ist gleich pbkdf2.Key (masterPassword, saltBytes, rfc2898Iterations, (keyLength 8) + aes.BlockSize, sha1.New) keyBytes: entspricht keyVectorData [: keyLength / 8] vectorBytes: entspricht keyVectorData [keyLength pro 8:] // AES-Verschlüsselung erstellen: also im Fall aesBlockDecrypter, aesErr: = aes.AesErr newcipher (keybytes); = null log.Printf ("[% s] Fehler beim Erstellen einer neuen AES-Verschlüsselung:% s n", Dateiname, aesErr.Error ()) zurückkommen zu andere Dinge // Der CBC-Modus funktioniert immer bei ganzen Blöcken. wenn akzeptabel len (encryptedBytes)% aes.BlockSize! = 0 log.Printf ("[% s] Die Länge der codierten Daten ist keine Blockgrößenzahl geworden. n", Dateiname) zurückkommen zu // Reservieren Sie den Speicher für entschlüsselte Daten. Per Definition (siehe AES-CBC) muss auch diese Anwendung die gleiche Länge wie die verschlüsselten Daten haben: decryptedData: gleich make ([] byte, len (encryptedBytes)) // Empfangsdecoder: aesDecrypter: = cipher.NewCBCDecrypter (aesBlockDecrypter, vectorBytes) // Daten entschlüsseln: aesDecrypter.CryptBlocks (decryptedData, cryptedBytes) // Konvertieren Sie seine entschlüsselten Daten in einen String: Puppe Madame Alexander = Thread (decryptedData) werden produziert zurück zu Importieren von

( "Krypto gegen Ass" "Krypto oder Verschlüsselung" "Krypto pro sha1" "Kodierung und base64" "github.com/twinj/uuid" "golang.org/x/crypto/pbkdf2" "io / ioutil" "Protokoll" "Mathematik" "Knochen")func encryptFile (Dateiname, alexander doll string, masterPassword [] byte) (status bool) { Konstante ( keyLength-Ganzzahl = 256 rfc2898 Iterationen int = 6 ) Wohlbefinden = schlecht secretBytesDecrypted: = [] Byte (Artefakt) // ein absolut neues Salt erstellen: saltBytes: impliziert uuid.NewV4 (). Byte () // Holen Sie sich Schlüssel und Vektor direkt aus Master-Passwort und Salt, erleben Sie RFC 2898: keyVectorData: bedeutet pbkdf2.Key (masterPassword, saltBytes, rfc2898Iterations, (keyLength - 8) + aes.BlockSize, sha1.New) keyBytes: = keyVectorData [: keyLength 8] vectorBytes: impliziert keyVectorData [Schlüssellänge pro 8:] // AES-Verschlüsselung erstellen: wenn aesBlockEncrypter, aesErr: entspricht aes.AesErr neue Chiffre (Schlüsselbytes); ? ? = null log.Printf ("[% s] Fehler beim Erstellen des Ersatzes in Bezug auf die AES-Verschlüsselung:% s n", Dateiname, aesErr.Error ()) komm unterstützung zu nicht so weit { // Der CBC-Modus bewegt sich kontinuierlich in ganzen Blöcken. angeboten len (secretBytesDecrypted)% aes.BlockSize! = 0 numberNecessaryBlocks: bedeutet int (math.Ceil (float64 (len (secretBytesDecrypted)) v . float64 (aes.BlockSize))) Erweiterung: = do ([] byte, numberNecessaryBlocks * aes.BlockSize) kopieren (erweitert, secretBytesDecrypted) secretBytesDecrypted präsentiert verbessert // Speicher für verschlüsselte Daten reservieren. Per Definition (siehe AES-CBC) müssen sie die gleiche Länge haben wie ihre biologischen Textdaten: verschlüsselte Daten: ist gleich make ([] byte, len (secretBytesDecrypted)) // einen Encoder erstellen:
Padding ist ungültig und kann nicht entfernt werden rijndaelmanagedtransform decryptdata

Padding wird für eine echte Blockchiffre verwendet, bei der wir beide Blöcke mit Padding-Bytes füllen. AES verwendet 128-Bit (16-Byte)-Blöcke, während DES 64-Bit (8-Byte)-Blöcke verwendet. Dies ist in 0x80 (10000000) erfüllt, gefolgt von der Verwendung von null (null) Bytes.