我有一个大文本文件(100MB或更多),我想使用AES算法使用Hadoop和Java(Map / Reduce函数)加密文本文件的内容,但由于我是Hadoop的新手,我是不确定如何开始这个。我发现JCE(一个Java库)已经实现了AES,但是我必须提供16个字节的文本以及一个生成16字节密码文本的密钥(加密输出)。我的问题是如何使用这种JCE / AES方法来完成我的目的?我应该如何拆分我的大输入文本文件以及我应该将哪些内容传递给Mapper类的map方法?什么应该是关键和价值?什么应该传递给Reduce方法?任何类型的起点或代码示例将不胜感激。 (P.S。我是Hadoop的新手,我刚刚在我的机器上运行了wordcount问题,就是这样。)
编辑1:
实际上,我必须做以下事情:
我现在的问题是,如何使用Hadoop的Map和Reduce方法并行化它?什么应该是关键以及如何在输出文件中累积输出密文?
答案 0 :(得分:2)
使用分组密码加密大型流需要您解决一个基本问题,与您实际拆分工作的方式完全无关(M / R或其他)。问题是cipher-block chaining。因为每个块都依赖于前一个块的输出,所以不能对第一个加密(或解密)块N-1的块N进行加密(或解密)。这意味着您一次只能加密一个块,从块1开始,然后是块2,然后是3,依此类推。
要解决这个问题,所有加密解决方案都会这样做:它们将流分成足够大小的块(正确的大小总是权衡)并使用一些带外存储,它们将每个块与启动现时(initialization vector)。通过这种方式,可以独立地对块进行ecnrypted和解密。
HDFS具有自然块(块),块上的访问模式是单线程和顺序的,这使其成为加密块的自然选择。在每个块上为nonce添加namenode上的额外元数据是相对简单的。如果你为自己的教育做这件事,这是一个有趣的项目要解决。密钥管理是一个单独的问题,当然,与任何加密方案一样,密钥管理实际上是重要部分,而实现密码则是微不足道的部分。
如果您正在考虑将其用于实际使用,请立即停止。为Hadoop使用现成的加密解决方案,其中有几个