Benutzer mit den meisten Antworten
c# Cryptography und Word

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
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
- Als Antwort vorgeschlagen Marcus1979 Freitag, 3. Juni 2016 08:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 24. März 2017 11:03
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 -
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 -
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
- Als Antwort vorgeschlagen Marcus1979 Freitag, 3. Juni 2016 08:34
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 24. März 2017 11:03