2017-03-20 7 views
0

Ich möchte einen Text (ca. 1 MB) verschlüsseln und ich verwende die maximale Länge der RSA-Schlüssel (4096 Bits). Der Schlüssel scheint jedoch zu kurz. Als ich gegoogelt habe, habe ich erfahren, dass die maximale Größe von Text, den ein RSA verschlüsseln kann, 8 Bytes kürzer ist als die Länge des Schlüssels. Daher kann ich auf diese Weise nur 501 Bytes verschlüsseln. Also habe ich mich entschieden, meinen Text in 2093 Arrays zu teilen (1024 * 1024/501 = 2092.1) .Die Frage ist, wie kann ich die ersten 501 Bytes in das erste Array in Scala einfüllen? Wer kann mir helfen?Scala- Wie kann ich bestimmte Bytes aus einer Datei lesen?

Antwort

0

Ich kann nicht sagen, ob Ihr kryptographischer Ansatz in Ordnung ist. (Ich weiß es nicht, aber ich würde mich auf Bibliotheken verlassen, die von erfahreneren Kryptografen geschrieben und überprüft wurden, wenn ich in Ihren Schuhen wäre. Ich bin mir nicht sicher, warum Sie 501 wählen, das ist 11 Bytes, nicht 8, shooter als 512.)

Aber Chunking Ihre Arrays in Blöcken fester Größe sollte einfach sein. Verwenden Sie einfach die grouped Funktion f Array.

val text : String = ??? 
val bytes = text.getBytes(scala.io.Codec.UTF8.charSet) // lots of ways to do this 
val blocks = bytes.grouped(501) 

Blocks wird eine Iterator[Array[Byte]], die jeweils 501 Bytes lang sein, mit Ausnahme der letzten (die kürzer sein kann).

+1

Ja, ich habe einen Fehler gemacht.11 Bytes kürzer nicht 8 Bytes kürzer –

+0

Ich benutze "text.toList" und der Block ist Iterator [Liste [Char]]. Der Typ, den ich will, ist Array [Byte], hast du irgendwelche Lösungen, um den Typ zu ändern? –

+0

ist es am besten, zuerst zu Bytes zu gehen, wie ich gezeigt habe, denn wenn Sie in Blöcke von 501 Zeichen gruppiert haben, gibt es keine Garantie, dass diese in 501 Bytes bei UTF8 Decodierung werden (außer Sie sind sicher, dass Ihr Text ASCII ist). Ich empfehle den Ansatz, den ich oben gezeigt habe. auf die enge Frage, können wir 'Iterator [List] [Char]] in 'Iterator [List [Byte]]', sicher. etwas wie 'iterListChar.map (_.mkString.getBytes (scala.io.Codec.UTF8.charSet))' –

Verwandte Themen