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

如何使用AES算法、Hadoop和Java加密大文本文件?,java,encryption,hadoop,aes,Java,Encryption,Hadoop,Aes,我有一个大的文本文件(100MB或更大),我想使用AES算法来使用Hadoop和Java(Map/Reduce函数)加密文本文件的内容,但由于我是Hadoop新手,我不确定如何启动它。我发现JCE(一个Java库)已经实现了AES,但我必须提供16字节的文本和一个密钥来生成16字节的密码文本(加密输出)。我的问题是如何使用这个JCE/AES方法来完成我的目标?我应该如何分割我的大输入文本文件,我应该向Mapper类的map方法传递什么?关键和价值应该是什么?应该向Reduce方法传递什么?任何形

我有一个大的文本文件(100MB或更大),我想使用AES算法来使用Hadoop和Java(Map/Reduce函数)加密文本文件的内容,但由于我是Hadoop新手,我不确定如何启动它。我发现JCE(一个Java库)已经实现了AES,但我必须提供16字节的文本和一个密钥来生成16字节的密码文本(加密输出)。我的问题是如何使用这个JCE/AES方法来完成我的目标?我应该如何分割我的大输入文本文件,我应该向Mapper类的map方法传递什么?关键和价值应该是什么?应该向Reduce方法传递什么?任何形式的起点或代码示例都将不胜感激。(另外,我是Hadoop新手,我刚刚在我的机器上运行了字数问题,就是这样。)

编辑1:

实际上,我必须做以下几件事:

  • 将输入文件拆分为16字节块
  • 对于每个区块,我必须应用AES算法获得16字节的密码文本,并将16字节的密码文本写入输出文件
  • 继续此过程,直到输入文件结束

  • 我现在的问题是,如何使用Hadoop的Map和Reduce方法并行化它?密钥应该是什么以及如何在输出文件中累积输出密码文本?

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

    为了解决这个问题,所有的加密解决方案都是这样做的:它们将流分割成大小适当的块(正确的大小总是一个折衷方案),并使用一些带外存储,在这些存储中,它们将每个块与启动nonce()相关联。这样就可以独立地对块进行加密和解密

    HDFS有一个自然块(块),块上的访问模式是单线程和顺序的,这使它成为加密块的自然选择。在namenode上为每个块上的nonce添加额外的元数据相对简单。如果你这样做是为了你自己的教育,这是一个有趣的项目来处理。密钥管理是一个单独的问题,当然,与任何加密方案一样,密钥管理实际上是重要的部分,而实现密码则是次要的部分


    如果你想在现实世界中使用这个,现在就停下来。使用Hadoop现成的加密解决方案,其中有几个

    实际上,我的意思是显示每行有16个字节的数据。因此,我可以一行一行地读取一行(16字节),并使用AES和Hadoop对其进行加密,然后对下一行执行相同的操作。我的困惑是如何使用Hadoop实现这一点。如果可能的话,请给我提供一些指导。这只是一个学习练习吗?如果不是,你是否确定这是最好的方法?@DaveNewton实际上,这是项目的一部分。我已经在Pthread范例中实现了AES,现在我必须在Hadoop中实现它,并比较结果/速度提升等。我最终将为一个像2GB或更大的文件这样的大型文件执行此操作。但是,我想先从10MB的数据开始,看看它是如何工作的。由于我是Hadoop的新手,我在开始的时候很挣扎。另外,这可能不会产生好的结果,但是探索对于与另一个实现进行比较很重要。谢谢。嗨,Remus,+1感谢您的深思熟虑的解释。这不是用于现实世界。这只是用于探索,例如,它如何影响性能、优点和缺点(主要是性能分析)。实际上,我正在做的项目有两个部分。第一部分已经完成,即使用C/Pthreads对AES算法进行并行化。我正在使用一个10MB的文件来加密AES实现。现在,我陷入了项目的第二部分,即使用Hadoop、Java和AES算法对同一文本文件进行加密。简而言之,我想用Hadoop和AES算法加密一个文本文件。使用经典Hadoop,您必须将您的作业表示为map reduce作业。我不确定你的工作(加密文件)是否适合m/R。洗牌阶段应该做什么?如何将映射输出映射到键值对,以减少要消耗的输入?我不是说不可能,我是说不合适。Hadoop 2.0和通用容器模型可能更适合。@RemusRusana,实际上我不确定文件的拆分。如果我使用JCE库的AES类及其方法来加密文件,我是否应该生成一个128Kb的密钥并将文本作为输入?输出应该是密文吗?我只是不知道如何将其应用到Hadoop的Map/Reduce中。我对纱线一无所知。我是Hadoop领域的新手。你能解释一下为什么纱线更合适吗?鉴于我只有两周的时间来完成这个项目,我是否应该研究一下这个问题。@RemusRusanu:我也面临着这个问题。您提到“为Hadoop使用现成的加密解决方案,其中有几种”。你能分享一些现成的解决方案吗?我在谷歌上搜索了“HDFS加密”和“Hadoop加密”,几乎什么也没找到。