Ist es möglich, base64-Kodieren eine Datei in chunks?
Ich versuche, die base64-kodiert einen riesigen input-Datei und eine text-Ausgabe-Datei, und ich versuche, herauszufinden, ob es möglich ist, Kodieren Sie die Eingabe-Datei die bit für bit, oder ob ich zu codieren, die ganze Sache auf einmal.
Dies erfolgt auf der AS/400 (iSeries), wenn das macht keinen Unterschied. Ich bin mit meinem eigenen base64-encoding-routine (geschrieben in RPG), die hervorragend funktioniert, und, waren es nicht ein Fall von der Größe Einschränkungen, wäre schön.
InformationsquelleAutor roryhewitt | 2011-10-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht möglich bit-durch-bit - aber 3 bytes auf ein Vielfaches von 3 bytes an Zeit tun!.
In anderen Worten, wenn Sie teilen Sie Ihre input-Datei in "chunks", welche Größe(s) ist (sind) ein Vielfaches von 3 bytes Kodieren Sie die Teile separat und Stück zusammen die resultierende B64-codierte Teile zusammen (in den entsprechenden orde, natürlich. Beachten Sie, dass die letzten chuink muss nicht genau ein Vielfaches von 3 bytes in der Größe, abhängig von der modulo-3 Wert in Ihrer Größe Ihren entsprechenden B64 Wert haben ein paar von diesen Füllzeichen (in der Regel die gleichen Zeichen) aber das ist ok, wie thiswill werden, das einzige Stück, dass hat (und braucht) diese Polsterung.
In der Dekodierung Richtung, es ist die gleiche Idee, außer, dass Sie brauchen, um split der B64-codierte Daten in vielfachen von 4 bytes. Decodieren parallel /individuell wie gewünscht und re-Stück der ursprünglichen Daten durch anfügen der decodierten Teile zusammen (wieder in der gleichen Reihenfolge).
Beispiel:
"Datei" Inhalt =
"Never argue with the data." (Jimmy Neutron)
.Direkt encoding =
Ik5ldmVyIGFyZ3VlIHdpdGggdGhlIGRhdGEuIiAoSmltbXkgTmV1dHJvbik=
Nun, in Blöcken:
"Never argue
-->Ik5ldmVyIGFyZ3Vl
with the
-->IHdpdGggdGhl
data." (Jimmy Neutron)
-->IGRhdGEuIiAoSmltbXkgTmV1dHJvbik=
Wie Sie sehen Stück in dieser Reihenfolge die 3-codierten Blöcken Betrag, den der gleiche wie der code generiert für die gesamte Datei.
Entschlüsselung erfolgt ebenso mit beliebigen chuncked Größe, vorausgesetzt, Sie sind Vielfache von 4 bytes. Es ist absolut nicht brauchen, um jede Art von Korrespondenz zwischen den Größen für die Codierung verwendet. (obwohl die Standardisierung auf eine einzige Größe für jede Richtung (sagen wir 300 und 400) kann macht die Sache einheitlicher und einfacher zu verwalten.
InformationsquelleAutor mjv
Es ist eine triviale Anstrengung zu Spalten gegeben bytestream in Stücke.
Können Sie base64 alle chunk bytes ohne problem.
Das problem, das Sie konfrontiert sind, ist, dass es sei denn, Sie haben Besondere Anforderungen an Ihre Brocken (Vielfache von 3 bytes), die Reihenfolge der base64-kodierte Stücke werden anders sein, als die aktuelle Ausgabe, die Sie wollen.
In C#, das ist ein (sloppy) Weg-Sie könnten es tun träge. Die Ausführung ist tatsächlich verschoben, bis string.Concat genannt wird, damit Sie tun können was Sie wollen mit den chunked-strings. (Wenn Sie stecken Sie diesen in LINQPad sehen Sie die Ausgabe)
Ausgabe
InformationsquelleAutor Squirrelsama
Hmmm, wenn Sie schrieb die base64 Konvertierung selbst du solltest bemerkt haben, die offensichtliche Sache: jede Sequenz von 3 Oktetts ist vertreten durch 4 Zeichen in base64.
So können Sie teilen Sie die base64-Daten an alle vielfachen von vier Zeichen, und es wird möglich sein, zu konvertieren, diese Teile wieder an Ihren ursprünglichen bits.
Ich weiß nicht, wie Charakter-Dateien und byte-Dateien verarbeitet werden, die auf einer AS/400, aber wenn es beide Konzepte, das sollte sehr einfach sein.
Wenn Sie all diese Fragen beantworten, was genau Schwierigkeiten hast du Links?
InformationsquelleAutor Roland Illig