MD5とは何ですか?広く使用されているパスワード ハッシュ関数である
MD5 (メッセージ ダイジェスト アルゴリズム、メッセージ ダイジェスト アルゴリズム) は、情報の送信が完全かつ一貫していることを確認するために 128 ビット (16 バイト) のハッシュ値 (ハッシュ値) を生成できます。その後ろの数字 5 は、MD4 を置き換えるために発明されたためです。 簡単に理解すると、その機能はファイルに一意の識別子を与えることです。 ファイルの拡張子を変更するとファイルが開けなくなる場合がありますが、MD5 の場合は変更ありません。したがって、ファイルの場合、名前を変更しても md5 検証には役に立ちません。
MD5 のアプリケーション
ここでは、私がこれまでに見た、より頻繁に使用されるアプリケーションのほんの一部を紹介します。
ダウンロード ファイルの検証
ネットワークは完全ではないため、大きなファイルをダウンロードするときにエラーが発生する可能性があります (小さなファイルでも発生する可能性はありますが、通常はファイルが大きいほどその可能性は高くなります)。これは正常な現象であり、ネットワークが変動するのは正常です。したがって、通常、一部のソフトウェア jar または開発ツールは、ファイルが正しくダウンロードされていないかどうかをユーザーが確認できるように、ダウンロード用のファイルの md5 値 (非常に小さいため、通常はエラーがないと考えられます) を追加で提供します。しかし、今ではネットワークはますます良くなり、基本的にエラーはなくなりました。そのため、ユーザーのネットワーク状態が悪い場合は、エラーを防ぐためにダウンロード後に必ず確認してください。 )
ファイルのアップロード
対照的に、md5 値を使用してファイルをアップロードする場合の適用範囲はより広いです。ここでの主な目的は、 ファイル重複排除とファイル フィルタリング です。
ファイルの重複排除
最近人気の映画、TV シリーズ、ゲーム、その他の人気リソースなど、ユーザーがアップロードしたファイルには通常、多くの重複が含まれていることを私たちは知っています。実際、これらはユーザーがアップロードしたファイルの大部分を占めるため、同じリソースの場合、保存する必要があるコピーは 1 つだけです。想像してみてください。1 万人のユーザー (おそらく 1 万人未満) が同じ 4 GB のムービーをアップロードすると、必要なディスク容量の合計は 4 * 10000 GB になります。コピーを 1 つだけアップロードする場合、他のユーザーがアップロードする場合は、ファイルの md5 値がローカルで計算され、同じであれば同じファイルとみなされ、4GB のスペースだけで十分です (もちろん、情報を記録するためのスペースのサイズはここでは無視されますが、ファイル自体のサイズと比較すると、この情報は依然として非常に小さいです)。この省スペース化がどれほど大きなものであるか考えてみてください。
私たちの日常生活では、頻繁に使用するはずです。数 GB の大きなファイルのアップロードは数秒で完了します。しかし、インターネットに少し知識がある人なら誰でも、 ネットワークのアップロード速度が遅いことを知っています。がダウンロード速度より小さい (これはエンドユーザーのみ) 、ダウンロード速度に達せず、アップロードさえ不可能です。したがって、ファイルの md5 値の計算処理を行うだけでよく、計算結果に応じて、存在する場合にはアップロードせず、ユーザーがそのファイルを所有していることを記録するだけです。そうでない場合は、正直にアップロードしてください。もちろん、このプロセスは通常非常に時間がかかります。
ファイル フィルタリング
一部のファイルには著作権とポリシーの問題があり、ユーザーによるアップロードが許可されていません。したがって、ユーザーがアップロードしたファイルも検証され、バックグラウンドでブラックリストと照合されます (これが当てはまります)。照合が成功した場合、ファイルはアップロードできないか、アップロードされたファイルは処理されています。この方法は非常に効率的であり、通常、ユーザーによるいわゆるランダムな名前変更操作はまったく役に立ちません。 したがって、ユーザーは関連するプラットフォームのポリシーと規制に従う必要があります。
ファイルの MD5 値を変更する
通常の状況では、ファイルのバイナリ コンテンツが変更される限り、ファイルの md5 値は確実に変更されます。通常、圧縮ファイルを使用して複数のファイルを圧縮してアップロードする方法があり、これにより圧縮ファイルの md5 値も変更されますが、プラットフォームによってはファイルを解凍することもできるため、万能薬ではありません。ただし、プログラムを通じてファイルのバイナリ データを変更および復元することは比較的簡単です。Java のストリームを使用して、ファイルに対するほとんどすべての操作 (たとえば、ファイルの各バイトを暗号化するため、復元は困難です) を実行できます。ファイルを暗号化するか、セクションを暗号化するか、最初にファイルを作成し、最初にファイルに固定番号を書き込んでから、関連ファイルのデータを書き込むことも良い方法です。)ファイルの場合、単に一連の連続したバイナリ ストリーム (論理的に) と考えることができます。それらを結合 (増加) または切り捨て (減少) することは、非常に単純な操作です。ここでは、 ファイルと、次の知識が関係する単純な操作を示します。 IOストリーム。
md5 を計算する簡単なプログラム
このプログラムは、上記の Java ネットワーク プログラミング です。ここではスレッドが削除され、操作が簡略化されています。とにかく、これは目的にのみ使用されます。 md5. 値を計算するため、ユーザーによるその他の操作は必要ありません。
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.security.DigestInputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.xml.bind.DatatypeConverter; public class TestMD5 { public static void main(String[] args){ for (String filepath : args) { String md5 = computeMD5(new File(filepath)); System.out.println(md5); } } private static String computeMD5(File file) { DigestInputStream din = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); //第一个参数是一个输入流 din = new DigestInputStream(new BufferedInputStream(new FileInputStream(file)), md5); byte[] b = new byte[1024]; while (din.read(b) != -1); byte[] digest = md5.digest(); StringBuilder result = new StringBuilder(file.getName()); result.append(": "); result.append(DatatypeConverter.printHexBinary(digest)); return result.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (din != null) { din.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } }
実行結果
ここに 2 つの写真があります。それらを結合して、ここに注目してください。マージは、通常のファイルのマージ (9 マスの画像を合成するなど) ではなく、ファイルのバイナリ データのマージです。
まず、ファイルの md5 値を計算します。以下の Ahusky.jpeg は、上の husky.jpeg の名前を変更したものであることに注意してください。変更がないことがわかります。 md5 値にあるので、これは同じファイルです。
#次に、ファイルをマージします。
#マージされたファイルの md5 値を計算します。
以上がJava を使用して変更されたファイルの MD5 値を計算する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
