2017-03-20 12 views
0

私はテキスト(約1 MB)を暗号化したいと思いますし、RSAキー(4096ビット)の最大長を使用します。しかし、鍵は短すぎるようです。私がグーグルで調べたところ、RSAが暗号化できるテキストの最大サイズはキーの長さよりも8バイト短いことがわかった。したがって、私はこの方法で501バイトしか暗号化できません。そこで私はテキストを2093の配列(1024 * 1024/501 = 2092.1)に分割することにしました。最初の501バイトをスカラーの最初の配列にどうやって入れるのですか?Scala-ファイルから特定のバイトを読み取るにはどうすればよいですか?

答えて

0

あなたの暗号手法が問題ないかどうかはコメントできません。 (私は知りませんが、私があなたの靴を履いていれば、知識の豊富な暗号学者によって書かれた図書館に頼るでしょう。なぜ501を選んだのか分かりません.11バイトで8ではなく、512よりも短いです。)

しかし、あなたの配列を固定サイズのブロックにチャンクするのは簡単です。関数f配列groupedを使用してください。

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

ブロックは、Iterator[Array[Byte]]なり長い最後を除く各501バイト(短くてもよいです)。

+1

はい、私は間違いを犯しました.8バイトではなく11バイト短くなりました –

+0

"text.toList"を使用し、ブロックはIterator [List [Char]]です。タイプはArray [Byte]です。どのようなソリューションをタイプを変更するには? –

+0

あなたが501文字のブロックにグループ化した場合、あなたのテキストがすべてASCIIでない限り、UTF8デコードで501バイトになるという保証はないので、最初に私が示したようにバイトに行くのが最善です。私は上記のアプローチをお勧めします。狭い質問では、Iterator [List [Char]]をIterator [List [Byte]]にすることができます。 'iterListChar.map(_.mkString.getBytes(scala.io.Codec.UTF8.charSet))'のようなものです。 –

関連する問題