「MD5」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> MD5 は、 Message Digest Algorithm 5 です。 128ビットのハッシュ値を出力するハッシュ関数です。 ...」)
 
 
(同じ利用者による、間の7版が非表示)
行1: 行1:
<!--
+
[[MD5]] は、 Message Digest Algorithm 5 です。128ビットの[[ハッシュ値]]を出力する[[ハッシュ関数]]です。
vim: filetype=mediawiki
+
-->
+
 
+
[[MD5]] は、 Message Digest Algorithm 5 です。
+
128ビットの[[ハッシュ値]]を出力する[[ハッシュ関数]]です。
+
 
+
読み方
+
えむでぃーふぁいぶ
+
  
 +
'''読み方'''
 +
;[[MD5]]:えむでぃーふぁいぶ
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 +
[[MD5]] は、 Message Digest Algorithm 5 です。128ビットの[[ハッシュ値]]を出力する[[ハッシュ関数]]です。2^128 (340京の1京倍)通りのハッシュ値をとります。[[MD4]]は、[[MD5]]の前身で、[[MD4]]の安全性を向上させたものが[[MD5]]です。
 +
[[MD5]]は、データの改ざんや破損の検出にMD5チェックサムとして用いられます。
 +
ハッシュ値 = md5 ( 入力データ )
 +
== パスワードの暗号化 ==
 +
以前は、Unixのアカウントの[[パスワード]]の暗号化のために[[MD5]]が利用されていました。
 +
== 安全性 ==
 +
SHA-256([[SHA-2]])以上が推奨されます。
 +
== MD5のコマンド ==
 +
* [[md5]]
 +
* [[OpenSSL]]
 +
== 使い方 ==
 +
[[MD5]]の求め方を説明します。
 +
=== OpenSSLコマンド ===
 +
[[OpenSSL]]コマンドでも[[MD5]]を求められます。OpenSSLコマンドを利用すると、いろいろなUnix環境で共通化できます。
  
[[MD5]] は、 Message Digest Algorithm 5 です。
+
plain.txt の [[MD5]]を求める例です。
128ビットの[[ハッシュ値]]を出力する[[ハッシュ関数]]です。
+
<syntaxhighlight lang="bash">
2^128 (340京の1京倍)通りのハッシュ値をとります。
+
$ openssl dgst -md5 plain.txt
 +
</syntaxhighlight>
  
[[MD4]]は、[[MD5]]の前身で、[[MD4]]の安全性を向上させたものが[[MD5]]です。
+
標準入力を扱う場合は、以下の通りです。
 +
<syntaxhighlight lang="bash">
 +
% echo hoge | openssl dgst -md5
 +
c59548c3c576228486a1f0037eb16a1b
 +
</syntaxhighlight>
  
[[MD5]]は、データの改ざんや破損の検出にMD5チェックサムとして用いられます。
+
[[MD5]]をバイナリ形式で出力します。
 +
<syntaxhighlight lang="bash">
 +
$ openssl dgst -md5 -binary plain.txt > plain.txt.md5
 +
</syntaxhighlight>
  
== 安全性 ==
+
[[HMAC]]を求める例です。
 +
<syntaxhighlight lang="bash">
 +
$ openssl dgst -md5 -hmac 'secret' plain.txt > plain.txt.md5
 +
</syntaxhighlight>
  
SHA-256([[SHA-2]])以上が推奨されます。
+
コロン区切りで出力します。
 +
<syntaxhighlight lang="bash">
 +
% echo hoge | openssl dgst -md5 -c
 +
c5:95:48:c3:c5:76:22:84:86:a1:f0:03:7e:b1:6a:1b
 +
</syntaxhighlight>
 +
=== md5sumコマンド ===
 +
Linuxには、md5sumコマンドがあります。
  
== 使い方 ==
+
ファイルのmd5を求めるには、以下の通りです。
 +
<syntaxhighlight lang="bash">
 +
$ md5sum /bin/ls
 +
</syntaxhighlight>
  
[[MD5]]の求め方を説明します。
+
複数のファイルのMD5を求める場合には、複数のファイルを引数で指定します。
 +
<syntaxhighlight lang="bash">
 +
$ md5sum a.txt b.txt
 +
60b725f10c9c85c70d97880dfe8191b3  a.txt
 +
3b5d5c3712955042212316173ccf37be  b.txt
 +
</syntaxhighlight>
 +
 
 +
[[ISOイメージ]]などを配布している、ftpなどのダウンロードサイトでは、ダウンロードしたファイルが壊れていないか確認するための、チェックサムファイルを一緒に配布しています。
 +
MD5のチェックサムファイルを作成します。
 +
<syntaxhighlight lang="bash">
 +
md5sum a.txt b.txt > MD5SUMS
 +
</syntaxhighlight>
 +
 
 +
md5sumコマンドを利用して、ファイルの[[ハッシュ値]]を確認します。
 +
<syntaxhighlight lang="bash">
 +
$ md5sum a.txt b.txt > MD5SUMS
 +
$ ls
 +
MD5SUMS  a.txt  b.txt
 +
$ md5sum -c MD5SUMS
 +
a.txt: OK
 +
b.txt: OK
 +
</syntaxhighlight>
 +
このように、ファイルが壊れていないか、簡単に確認できます。
 +
=== md5コマンド ===
 
ここでは、[[FreeBSD]]のmd5コマンドを用います。
 
ここでは、[[FreeBSD]]のmd5コマンドを用います。
 
[[Linux]]では、md5sumを利用してください。
 
[[Linux]]では、md5sumを利用してください。
行42: 行93:
 
MD5 (/COPYRIGHT) = 8bf4da0bcda130c2fe3a41ab7bc48738
 
MD5 (/COPYRIGHT) = 8bf4da0bcda130c2fe3a41ab7bc48738
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
=== WindowsでMD5を計算する fciv ===
  
== 関連項目 ==
+
[[Windows]]で[[MD5]]を計算するには、FCIV(File Checksum Integrity Verifier)を使用します。デフォルトでは、インストールされていないため、[https://support.microsoft.com/en-us/kb/841290 FCIV] をインストールします。
  
 +
[[MD5]]を計算するには、コマンドプロンプトを起動します。
 +
<syntaxhighlight lang="dos">
 +
C:\> fciv -md5 file.txt
 +
</syntaxhighlight>
 +
なお、fcivで[[SHA-1]]も計算できます。
 +
 +
=== PHPでのMD5の求め方 ===
 +
<syntaxhighlight lang="php">
 +
<?php
 +
$hash = md5 ( $input );
 +
?>
 +
</syntaxhighlight>
 +
 +
第二引数をTRUEにすると、16バイト長のバイナリ形式で返します。
 +
<syntaxhighlight lang="php">
 +
<?php
 +
$hash = md5 ( $input, true );
 +
?>
 +
</syntaxhighlight>
 +
 +
ファイルのMD5を求める場合には、md5_file()を利用します。
 +
<syntaxhighlight lang="bash">
 +
<?php
 +
$hash = md5_file ( "/bin/ls" );
 +
?>
 +
</syntaxhighlight>
 +
=== JavaでのMD5の求め方 ===
 +
<syntaxhighlight lang="java">
 +
/*
 +
* MD5.java
 +
* Copyright (C) 2015 kaoru <kaoru@localhost>
 +
*/
 +
import java.security.MessageDigest;
 +
 +
class MD5 {
 +
        public static void main(String[] args) {
 +
                String text = "hoge";
 +
                byte[] cipher_byte;
 +
                try{
 +
                        MessageDigest md = MessageDigest.getInstance("MD5");
 +
                        md.update(text.getBytes());
 +
                        cipher_byte = md.digest();
 +
                        StringBuilder sb = new StringBuilder(2 * cipher_byte.length);
 +
                        for(byte b: cipher_byte) {
 +
                                sb.append(String.format("%02x", b&0xff) );
 +
                        }
 +
                        System.out.println( sb );
 +
                } catch (Exception e) {
 +
                        e.printStackTrace();
 +
                }
 +
        }
 +
}
 +
</syntaxhighlight>
 +
== MD5のクラッキング ==
 +
=== MD5 オンラインクラッカー ===
 +
* [http://md5cracker.org/ md5 cracker]
 +
* [http://md5crack.com/ Online MD5 Cracker]
 +
* [http://www.md5online.org/ MD5 Online MD5 Decrypter]
 +
=== MD5 オフラインクラッカー ===
 +
* [http://sourceforge.net/projects/md5crackerx/ MD5 Cracker]
 +
== 関連項目 ==
 
* [[ハッシュ]]
 
* [[ハッシュ]]
 
* [[ハッシュ関数]]
 
* [[ハッシュ関数]]
 +
* [[暗号学的ハッシュ関数]]
 
* [[ハッシュ値]]
 
* [[ハッシュ値]]
 +
* [[MD4]]
 
* [[SHA-1]]
 
* [[SHA-1]]
 
* [[SHA-2]]
 
* [[SHA-2]]
 +
<!--
 +
vim: filetype=mediawiki
 +
-->

2015年9月12日 (土) 21:24時点における最新版

MD5 は、 Message Digest Algorithm 5 です。128ビットのハッシュ値を出力するハッシュ関数です。

読み方

MD5
えむでぃーふぁいぶ

概要

MD5 は、 Message Digest Algorithm 5 です。128ビットのハッシュ値を出力するハッシュ関数です。2^128 (340京の1京倍)通りのハッシュ値をとります。MD4は、MD5の前身で、MD4の安全性を向上させたものがMD5です。 MD5は、データの改ざんや破損の検出にMD5チェックサムとして用いられます。

ハッシュ値 = md5 ( 入力データ )

パスワードの暗号化

以前は、Unixのアカウントのパスワードの暗号化のためにMD5が利用されていました。

安全性

SHA-256(SHA-2)以上が推奨されます。

MD5のコマンド

使い方

MD5の求め方を説明します。

OpenSSLコマンド

OpenSSLコマンドでもMD5を求められます。OpenSSLコマンドを利用すると、いろいろなUnix環境で共通化できます。

plain.txt の MD5を求める例です。

$ openssl dgst -md5 plain.txt

標準入力を扱う場合は、以下の通りです。

% echo hoge | openssl dgst -md5
c59548c3c576228486a1f0037eb16a1b

MD5をバイナリ形式で出力します。

$ openssl dgst -md5 -binary plain.txt > plain.txt.md5

HMACを求める例です。

$ openssl dgst -md5 -hmac 'secret' plain.txt > plain.txt.md5

コロン区切りで出力します。

% echo hoge | openssl dgst -md5 -c
c5:95:48:c3:c5:76:22:84:86:a1:f0:03:7e:b1:6a:1b

md5sumコマンド

Linuxには、md5sumコマンドがあります。

ファイルのmd5を求めるには、以下の通りです。

$ md5sum /bin/ls

複数のファイルのMD5を求める場合には、複数のファイルを引数で指定します。

$ md5sum a.txt b.txt
60b725f10c9c85c70d97880dfe8191b3  a.txt
3b5d5c3712955042212316173ccf37be  b.txt

ISOイメージなどを配布している、ftpなどのダウンロードサイトでは、ダウンロードしたファイルが壊れていないか確認するための、チェックサムファイルを一緒に配布しています。 MD5のチェックサムファイルを作成します。

md5sum a.txt b.txt > MD5SUMS

md5sumコマンドを利用して、ファイルのハッシュ値を確認します。

$ md5sum a.txt b.txt > MD5SUMS
$ ls
MD5SUMS  a.txt  b.txt
$ md5sum -c MD5SUMS
a.txt: OK
b.txt: OK

このように、ファイルが壊れていないか、簡単に確認できます。

md5コマンド

ここでは、FreeBSDのmd5コマンドを用います。 Linuxでは、md5sumを利用してください。

文字列から MD5 を求める例です。

% md5 -s hoge
MD5 ("hoge") = ea703e7aa1efda0064eaa507d9e8ab7e

ファイルから MD5 を求める例です。

% md5 /COPYRIGHT
MD5 (/COPYRIGHT) = 8bf4da0bcda130c2fe3a41ab7bc48738

WindowsでMD5を計算する fciv

WindowsMD5を計算するには、FCIV(File Checksum Integrity Verifier)を使用します。デフォルトでは、インストールされていないため、FCIV をインストールします。

MD5を計算するには、コマンドプロンプトを起動します。

C:\> fciv -md5 file.txt

なお、fcivでSHA-1も計算できます。

PHPでのMD5の求め方

<?php
$hash = md5 ( $input );
?>

第二引数をTRUEにすると、16バイト長のバイナリ形式で返します。

<?php
$hash = md5 ( $input, true );
?>

ファイルのMD5を求める場合には、md5_file()を利用します。

<?php
$hash = md5_file ( "/bin/ls" );
?>

JavaでのMD5の求め方

/*
 * MD5.java
 * Copyright (C) 2015 kaoru <kaoru@localhost>
 */
import java.security.MessageDigest;
 
class MD5 {
        public static void main(String[] args) {
                String text = "hoge";
                byte[] cipher_byte;
                try{
                        MessageDigest md = MessageDigest.getInstance("MD5");
                        md.update(text.getBytes());
                        cipher_byte = md.digest();
                        StringBuilder sb = new StringBuilder(2 * cipher_byte.length);
                        for(byte b: cipher_byte) {
                                sb.append(String.format("%02x", b&0xff) );
                        }
                        System.out.println( sb );
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}

MD5のクラッキング

MD5 オンラインクラッカー

MD5 オフラインクラッカー

関連項目