簡體   English   中英

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

[英]How to encrypt a big text file using AES algorithm, Hadoop and Java?

我有一個大文本文件(100MB 或更多),我想使用 AES 算法使用 Hadoop 和 Java(Map/Reduce 函數)加密文本文件的內容,但由於我是 Hadoop 的新手,我不太確定如何開始。 我找到了 JCE(一個 Java 庫),其中 AES 已經實現,但我必須提供 16 字節的文本以及一個密鑰來生成 16 字節的密文(加密輸出)。 我的問題是如何使用這種 JCE/AES 方法來完成我的目的? 我應該如何拆分我的大輸入文本文件以及我應該將什么傳遞給 Mapper 類的 map 方法? 鍵和值應該是什么? 什么應該傳遞給Reduce方法? 任何類型的起點或代碼示例將不勝感激。 (PS 我是 Hadoop 的新手,我只是在我的機器上運行了 wordcount 問題,就是這樣。)

編輯 1:

實際上,我必須做以下事情:

  1. 將輸入文件分成 16 個字節的塊。
  2. 對於每個塊,我必須應用 AES 算法來獲取 16 字節密文並將 16 字節密文寫入輸出文件。
  3. 繼續這個過程,直到輸入文件結束。

我現在的問題是,如何使用 Hadoop 的 Map 和 Reduce 方法對其進行並行化? 密鑰應該是什么以及如何在輸出文件中累積輸出密文?

使用分組密碼加密大流需要您解決一個基本問題,這與您實際如何拆分工作(M/R 或其他)完全無關。 問題是密碼塊鏈接 因為每個塊都依賴於前一個塊的輸出,所以您不能加密(或解密)塊 N,而無需先加密(或解密)塊 N-1。 這意味着您一次只能加密一個塊,從塊 1 開始,然后是塊 2,然后是 3,依此類推。

為了解決這個問題,所有加密解決方案都做同樣的事情:他們將流分成足夠大小的塊(正確的大小總是一種權衡)並使用一些帶外存儲,將每個塊與啟動隨機數相關聯(初始化向量)。 這樣塊就可以獨立加密和解密。

HDFS 有一個自然的塊(塊),塊上的訪問模式是單線程和順序的,這使其成為加密塊的自然選擇。 在名稱節點上為每個塊上的隨機數添加額外的元數據相對簡單。 如果您這樣做是為了自己的教育,這是一個有趣的項目。 密鑰管理是一個單獨的問題,當然,與任何加密方案一樣,密鑰管理實際上是重要的部分,而實現密碼則是微不足道的部分。

如果您正在考慮將其用於現實世界,請立即停止。 對 Hadoop 使用現成的加密解決方案,其中有幾個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM