我有一个大文本文件(100MB或更多),我想使用AES算法通过Hadoop和Java(Map / Reduce函数)对文本文件的内容进行加密,但是由于我是Hadoop的新手,所以我不是真的确定如何开始。我找到了已经实现AES的JCE(一个Java库),但是我必须提供16个字节的文本以及一个密钥以生成16个字节的密文(加密的输出)。我的问题是如何使用此JCE / AES方法完成目标?我应该如何分割我的大输入文本文件,应该将什么传递给Mapper类的map方法?关键和价值是什么?什么应该传递给Reduce方法?任何种类的起点或代码示例将不胜感激。 (P.S.我是Hadoop的新手,我只是在计算机上运行了字数统计问题,就是这样。)
编辑1:
实际上,我必须执行以下操作:
我现在的问题是,如何使用Hadoop的Map和Reduce方法对其进行并行化?什么是密钥,以及如何在输出文件中累积输出密文?
使用分组密码对大数据流进行加密需要您解决一个基本问题,这与您实际分割工作(M / R或其他任何方式)完全无关。问题是cipher-block chaining。因为每个块都依赖于前一个块的输出,所以您不能加密(或解密)块N,而无需首先加密(或解密)块N-1。这意味着您一次只能加密一个块的文件,从块1开始,然后是块2,然后是3,依此类推。
要解决该问题,所有加密解决方案都会做同样的事情:它们将流分成足够大小的块(正确的大小始终是一个折衷方案),并使用一些带外存储,它们将每个块与一个启动随机数(initialization vector)。这样,可以独立加密和解密大块。
HDFS有一个自然块(块),并且块上的访问模式是单线程的和顺序的,这使其成为加密块的自然选择。在每个块上的随机数的名称节点上添加额外的元数据相对容易做到。如果您这样做是为了自己的教育,那么这个项目很有趣。密钥管理是一个单独的问题,当然,与任何加密方案一样,密钥管理实际上是重要部分,而实施密码则是琐碎的部分。
如果您正在考虑将其用于现实世界,请立即停止。对Hadoop使用现成的加密解决方案,其中有几种
@@ K Rakibul Islam您是否已回答问题,即使用hadoop或mapeduce的AES代码。如果您这样做,请给我发送程序。我的邮件ID为[email protected]。