Frage

Kann jemand etwas Licht geben, wie dies zu tun? Ich kann für normalen Text oder Byte-Array tun dies, aber nicht sicher, wie eine pdf zu nähern. lese ich stopfen das pdf in ein Byte-Array zuerst?

War es hilfreich?

Lösung

Verwenden Sie File.ReadAllBytes das PDF laden Datei, und dann codiert den Byte-Array als normal mit Convert.ToBase64String(bytes) .

Andere Tipps

Es gibt eine Möglichkeit, dass Sie dies in Stücken tun können, damit Sie müssen auf einmal eine Tonne Speicher nicht verbrennen.

.Net einen Codierer, der die Chunking tun können, aber es ist in der Art eines seltsamen Ort. Sie setzen es in System.Security.Cryptography Namespace.

ich den Beispiel-Code unten getestet habe, und ich bekomme gleich Ausgang entweder meine Methode oder Andrew Methode unter Verwendung von oben.

Hier ist, wie es funktioniert: Sie eine Klasse Feuer ein Crypto genannt. Dies ist eine Art eines Adapters, der in einem anderen Strom-Stecker. Sie schließen eine Klasse CryptoTransform in die Crypto genannt (was wiederum zu Ihrer Datei / Speicher / Netzwerk-Stream angeschlossen ist) und führt Datentransformationen auf die Daten, während sie aus oder in den Stream geschrieben gelesen hat wird.

Normalerweise wird die Transformation ist die Verschlüsselung / Entschlüsselung, aber .net enthält ToBase64 und FromBase64 Transformationen als auch, so wir werden verschlüsselt nicht nur codiert.

Hier ist der Code. Ich umfasste eine (vielleicht schlecht genannt) Umsetzung von Andrew Vorschlag, so dass Sie die Ausgabe vergleichen können.


    class Base64Encoder
    {
        public void Encode(string inFileName, string outFileName)
        {
            System.Security.Cryptography.ICryptoTransform transform = new System.Security.Cryptography.ToBase64Transform();
            using(System.IO.FileStream inFile = System.IO.File.OpenRead(inFileName),
                                      outFile = System.IO.File.Create(outFileName))
            using (System.Security.Cryptography.CryptoStream cryptStream = new System.Security.Cryptography.CryptoStream(outFile, transform, System.Security.Cryptography.CryptoStreamMode.Write))
            {
                // I'm going to use a 4k buffer, tune this as needed
                byte[] buffer = new byte[4096];
                int bytesRead;

                while ((bytesRead = inFile.Read(buffer, 0, buffer.Length)) > 0)
                    cryptStream.Write(buffer, 0, bytesRead);

                cryptStream.FlushFinalBlock();
            }
        }

        public void Decode(string inFileName, string outFileName)
        {
            System.Security.Cryptography.ICryptoTransform transform = new System.Security.Cryptography.FromBase64Transform();
            using (System.IO.FileStream inFile = System.IO.File.OpenRead(inFileName),
                                      outFile = System.IO.File.Create(outFileName))
            using (System.Security.Cryptography.CryptoStream cryptStream = new System.Security.Cryptography.CryptoStream(inFile, transform, System.Security.Cryptography.CryptoStreamMode.Read))
            {
                byte[] buffer = new byte[4096];
                int bytesRead;

                while ((bytesRead = cryptStream.Read(buffer, 0, buffer.Length)) > 0)
                    outFile.Write(buffer, 0, bytesRead);

                outFile.Flush();
            }
        }

        // this version of Encode pulls everything into memory at once
        // you can compare the output of my Encode method above to the output of this one
        // the output should be identical, but the crytostream version
        // will use way less memory on a large file than this version.
        public void MemoryEncode(string inFileName, string outFileName)
        {
            byte[] bytes = System.IO.File.ReadAllBytes(inFileName);
            System.IO.File.WriteAllText(outFileName, System.Convert.ToBase64String(bytes));
        }
    }

Ich bin auch das Spiel mit dem ich die Crypto befestigen. In der Encode Methode, bin ich es mit dem Ausgang (Schreiben) Strom angebracht wird, so dass, wenn ich beispielsweise die Crypto, benutze ich seine Methode Write ().

Wenn ich lese, ich bin Befestigen an den Eingang (Lesung) Strom, so dass ich die Lesemethode auf dem Crypto. Es spielt keine Rolle, welcher Strom lege ich es auf. Ich muss nur die entsprechende lesen geben oder Enumerationsmember schreiben Sie an die Crypto Konstruktor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top