2017-03-20 61 views
0

我想加密一个文本(大约1 MB),并使用RSA密钥的最大长度(4096位)。但是,关键似乎太短了。在我搜索时,我知道RSA可以加密的文本的最大大小比密钥的长度短8个字节。因此,我只能以这种方式加密501个字节。所以我决定把我的文本分成2093个数组(1024 * 1024/501 = 2092.1)。问题是我该如何将第一个501字节倒入scala的第一个数组中?任何能够帮助我的人?Scala-如何从文件中读取某些特定的字节?

回答

0

我不能评论你的加密方法是否是好的。 (我不知道,但将依靠书面和博学密码专家审核,如果我是你的话文库。我不知道为什么你选择501,这是11个字节,而不是8,shoerter比512)

不过分块的阵列成固定大小的块应该很容易。只需使用grouped函数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) 

块将是Iterator[Array[Byte]],每501个字节长除了最后(其可以是短)。

+1

是的,我犯了一个错误.11个字节更短,不是8个字节更短 –

+0

我使用“text.toList”和块是迭代器[列表[字符]]。我想要的类型是数组[字节],你有任何解决方案来改变类型? –

+0

最好还是去字节第一,因为我已经证明,因为如果你已经分为501个字符块,也不能保证这些会变成对UTF8解码501个字节(除非你确信你的文字是所有ASCII)。我建议我上面显示的方法。在狭义问题上,当然可以将Iterator [List [Char]]'变成'Iterator [List [Byte]]。像'iterListChar.map(_.mkString.getBytes(scala.io.Codec.UTF8.charSet))' –

相关问题