「MD5」の版間の差分
(同じ利用者による、間の4版が非表示) | |||
行18: | 行18: | ||
== 使い方 == | == 使い方 == | ||
[[MD5]]の求め方を説明します。 | [[MD5]]の求め方を説明します。 | ||
+ | === OpenSSLコマンド === | ||
+ | [[OpenSSL]]コマンドでも[[MD5]]を求められます。OpenSSLコマンドを利用すると、いろいろなUnix環境で共通化できます。 | ||
+ | |||
+ | plain.txt の [[MD5]]を求める例です。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ openssl dgst -md5 plain.txt | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 標準入力を扱う場合は、以下の通りです。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % echo hoge | openssl dgst -md5 | ||
+ | c59548c3c576228486a1f0037eb16a1b | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[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> | ||
+ | |||
+ | コロン区切りで出力します。 | ||
+ | <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を求める場合には、複数のファイルを引数で指定します。 | ||
+ | <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を利用してください。 | ||
行31: | 行92: | ||
% md5 /COPYRIGHT | % md5 /COPYRIGHT | ||
MD5 (/COPYRIGHT) = 8bf4da0bcda130c2fe3a41ab7bc48738 | MD5 (/COPYRIGHT) = 8bf4da0bcda130c2fe3a41ab7bc48738 | ||
+ | </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> | </syntaxhighlight> | ||
== MD5のクラッキング == | == MD5のクラッキング == |
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
WindowsでMD5を計算するには、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(); } } }