AWS Glacierサービスについて知り、RESTAPIを介してファイルをアップロードするための小さなPythonアプリケーションを作成したいと思いました。必要なヘッダーを調べて、に遭遇しましx-amz-sha256-tree-hash
た。ファイル全体のSHA-256ハッシュと、各1MBチャンクのすべてのハッシュの親のハッシュを計算する必要があります。これにより、次のツリーが作成されます。
(ここから撮影した画像)
私はすでに1MBのチャンクを読み取る関数と、そのハッシュをオンザフライで計算するクラスを作成しましたが、その後、完全に苦労しました。
私のアプリケーションでは、chunk
データを取得してメソッドでハッシュを計算し、__init__
親と子(通常のツリーのように)を保持するというクラスを作成しました。ユーザーがファイルを開くと、これらのチャンクインスタンスはそれぞれのハッシュで適切に生成されます(この例では、7つのチャンクインスタンスになります)。
今、私は互いに関連している2つの大きな問題を抱えています。
- このツリーを逆に構築するにはどうすればよいですか?基本的に、最下層の2つのチャンクインスタンスごとに新しいチャンクを作成し、それらの2つのハッシュに基づいてハッシュを計算する必要があります。しかし、私はその親をどこに保管しますか?親の子供たちと逆ツリーウォーキングをしますか?
- それは奇数の子供たちとどのように機能しますか?各親レイヤーを通過するアルゴリズムがある場合、最後の(0.5 MB)チャンクを見逃します。
私はSOでこのトピックをチェックしましたが、その方法は、常に与えられているわけではない偶数の子カウントでのみ機能します。
この問題を解決する方法/アルゴリズム/アプローチを見つけるのを手伝ってもらえますか?
前もって感謝します!
ポール