如何使用AES算法,Hadoop和Java加密大文本文件?

问题描述 投票:0回答:2

我有一个大文本文件(100MB或更多),我想使用AES算法通过Hadoop和Java(Map / Reduce函数)对文本文件的内容进行加密,但是由于我是Hadoop的新手,所以我不是真的确定如何开始。我找到了已经实现AES的JCE(一个Java库),但是我必须提供16个字节的文本以及一个密钥以生成16个字节的密文(加密的输出)。我的问题是如何使用此JCE / AES方法完成目标?我应该如何分割我的大输入文本文件,应该将什么传递给Mapper类的map方法?关键和价值是什么?什么应该传递给Reduce方法?任何种类的起点或代码示例将不胜感激。 (P.S.我是Hadoop的新手,我只是在计算机上运行了字数统计问题,就是这样。)

编辑1:

实际上,我必须执行以下操作:

  1. 将输入文件分成16个字节的块。
  2. 对于每个块,我必须应用AES算法来获取16个字节的密文,并将16个字节的密文写入输出文件。
  3. 继续该过程,直到输入文件结束。

我现在的问题是,如何使用Hadoop的Map和Reduce方法对其进行并行化?什么是密钥,以及如何在输出文件中累积输出密文?

java encryption hadoop aes
2个回答
2
投票

使用分组密码对大数据流进行加密需要您解决一个基本问题,这与您实际分割工作(M / R或其他任何方式)完全无关。问题是cipher-block chaining。因为每个块都依赖于前一个块的输出,所以您不能加密(或解密)块N,而无需首先加密(或解密)块N-1。这意味着您一次只能加密一个块的文件,从块1开始,然后是块2,然后是3,依此类推。

要解决该问题,所有加密解决方案都会做同样的事情:它们将流分成足够大小的块(正确的大小始终是一个折衷方案),并使用一些带外存储,它们将每个块与一个启动随机数(initialization vector)。这样,可以独立加密和解密大块。

HDFS有一个自然块(块),并且块上的访问模式是单线程的和顺序的,这使其成为加密块的自然选择。在每个块上的随机数的名称节点上添加额外的元数据相对容易做到。如果您这样做是为了自己的教育,那么这个项目很有趣。密钥管理是一个单独的问题,当然,与任何加密方案一样,密钥管理实际上是重要部分,而实施密码则是琐碎的部分。

如果您正在考虑将其用于现实世界,请立即停止。对Hadoop使用现成的加密解决方案,其中有几种


0
投票

@@ K Rakibul Islam您是否已回答问题,即使用hadoop或mapeduce的AES代码。如果您这样做,请给我发送程序。我的邮件ID为[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.