none
c# Cryptography und Word RRS feed

  • Frage

  • Hallo Forum,

    ich erstelle mit Word eine Dokument und speichere es im mht Format ab.

    Dann wird das mht Dokument verschlüsselt.

    Dafür nutze ich :

    using System.Security.Cryptography;

    Wenn ich das Dokument mit Word 2007 erstelle funktioniert das alles perfekt. Das Verschlüsseln und Entschlüsseln.

    Erstelle ich das Dokument mit Word 2013 dann sind nach der Entschlüsselung alle Umlaute weg.

    ## Original ##

    Dokument mit Windows 10 und Word 2013

    äÄ öÖ üÜ ß

    ## Nach dem Entschlüsseln ##

    Dokument mit Windows 10 und Word 2013

    �� �� �� �

    ##

    Woran liegt das ?  Liegt das an Word 2013   oder hat die Cryptography ein Problem mit Word 2013 ?

    AesCryptoServiceProvider DES = new AesCryptoServiceProvider();
            DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    

    Wenn man das Word 2013 Dokument direkt verschlüsselt und dann entschlüsselt kommt die Fehlermeldung das der Inhalt defekt ist.

    Kann mir da jemand helfen ?


    Gruß Roland

    Sonntag, 29. November 2015 12:41

Antworten

  • Hallo Peter, Hallo Stefan,

    das Problem gibt es mit Word 2007 NICHT 

    erst ab Word 2013 gibt es den Effekt mit den Sonderzeichen.

    Anbei der Code.

          

           public void EncryptFile256bit(string sInputFilename, string sOutputFilename, string sKey)
            {
                AesCryptoServiceProvider DES = new AesCryptoServiceProvider();
                //Set secret key For DES algorithm.
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                //Set initialization vector.
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    
                FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
    
                FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);
                ICryptoTransform desdecrypt = DES.CreateDecryptor();
                //DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateEncryptor();
                CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);
    
                byte[] bytearrayinput = new byte[fsInput.Length];
                fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
                cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
                cryptostream.Close();
                fsInput.Close();
                fsEncrypted.Close();
            }


    Gruß Roland

    Mittwoch, 2. Dezember 2015 21:00

Alle Antworten

  • Hi Roland,
    für die Verschlüsselung ist die Datei als Binär-Stream zu nutzen. Wenn da das falsche Encoding genutzt wird, dann kann es sein, dass Umlaute derart kryptisch erscheinen. Du solltest mal die Befehle zur Konvertierung des Byte-Streams zeigen.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Sonntag, 29. November 2015 14:02
  • Hi,

    ich sehe zwar nicht, wo Du nun effektiv verschlüsselst aber ggfs. hilft es auch schon, wenn Du nicht ASCII, sondern UTF8 als Encoding verwendest.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Sonntag, 29. November 2015 14:02
    Moderator
  • Hallo Peter, Hallo Stefan,

    das Problem gibt es mit Word 2007 NICHT 

    erst ab Word 2013 gibt es den Effekt mit den Sonderzeichen.

    Anbei der Code.

          

           public void EncryptFile256bit(string sInputFilename, string sOutputFilename, string sKey)
            {
                AesCryptoServiceProvider DES = new AesCryptoServiceProvider();
                //Set secret key For DES algorithm.
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                //Set initialization vector.
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
    
                FileStream fsInput = new FileStream(sInputFilename, FileMode.Open, FileAccess.Read);
    
                FileStream fsEncrypted = new FileStream(sOutputFilename, FileMode.Create, FileAccess.Write);
                ICryptoTransform desdecrypt = DES.CreateDecryptor();
                //DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
                DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                ICryptoTransform desencrypt = DES.CreateEncryptor();
                CryptoStream cryptostream = new CryptoStream(fsEncrypted, desencrypt, CryptoStreamMode.Write);
    
                byte[] bytearrayinput = new byte[fsInput.Length];
                fsInput.Read(bytearrayinput, 0, bytearrayinput.Length);
                cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
                cryptostream.Close();
                fsInput.Close();
                fsEncrypted.Close();
            }


    Gruß Roland

    Mittwoch, 2. Dezember 2015 21:00