メインコンテンツにスキップ

ハッシュ生成器

MD5、SHA-1、SHA-256、SHA-512ハッシュを生成する無料オンラインツールです。

📝 입력 텍스트

✨ 생성된 해시

MD5128-bit
SHA-1160-bit
SHA-256256-bit ⭐ 권장
SHA-512512-bit

해시 함수는 임의의 크기의 데이터를 고정된 크기의 값으로 변환합니다. 비밀번호 저장, 파일 무결성 검증 등에 사용됩니다. SHA-256이 현재 가장 권장되는 알고리즘입니다.

ハッシュ関数とは?

ハッシュ関数は、任意のサイズのデータを固定サイズの値(ハッシュ)に変換する一方向関数です。同じ入力は常に同じハッシュを生成し、ハッシュから元のデータを復元することはできません。

主な機能

  • 4つのアルゴリズム: MD5、SHA-1、SHA-256、SHA-512
  • リアルタイム生成: 入力と同時にハッシュ生成
  • 即座にコピー: 各ハッシュをワンクリックでコピー
  • 多言語サポート: UTF-8完全サポート(日本語、中国語、韓国語など)
  • 推奨アルゴリズム表示: SHA-256推奨

サポートアルゴリズム

MD5 (128-bit) ⚠️

  • 長さ: 32文字 (16進数)
  • 速度: 非常に速い
  • セキュリティ: 脆弱 - 衝突攻撃が可能
  • 用途: チェックサム、レガシーシステム
入力: Hello World
MD5: b10a8db164e0754105b7a99be72e3fe5

SHA-1 (160-bit) ⚠️

  • 長さ: 40文字 (16進数)
  • 速度: 速い
  • セキュリティ: 脆弱 - 衝突攻撃が可能
  • 用途: Git (レガシー)、チェックサム
入力: Hello World
SHA-1: 0a4d55a8d778e5022fab701977c5d840bbc486d0

SHA-256 (256-bit) ⭐ 推奨

  • 長さ: 64文字 (16進数)
  • 速度: 中程度
  • セキュリティ: 強力 - 現在安全
  • 用途: パスワードハッシュ、ブロックチェーン、デジタル署名
入力: Hello World
SHA-256: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

SHA-512 (512-bit)

  • 長さ: 128文字 (16進数)
  • 速度: SHA-256より遅い (64ビットシステムでは速い場合がある)
  • セキュリティ: 非常に強力
  • 用途: 高いセキュリティ要件時
入力: Hello World
SHA-512: 2c74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b

使用例

1. パスワード保存 (SHA-256 + Salt)

const password = 'myPassword123';
const salt = generateRandomSalt(); // UUIDなど
const hash = sha256(password + salt);

// データベースに保存
// { username: 'user1', hash: '...', salt: '...' }

⚠️ 注意: 実際にはbcrypt、argon2のような専用アルゴリズムの使用を推奨!

2. ファイル整合性検証

# ダウンロードしたファイルのハッシュ確認
$ sha256sum ubuntu-22.04.iso
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

# 公式ハッシュと比較

3. API署名

const data = { userId: 123, amount: 100 };
const secret = 'api-secret-key';
const signature = sha256(JSON.stringify(data) + secret);

// リクエストヘッダーに含める
// X-Signature: a591a6d40bf420404a011733cfb7b190...

4. GitコミットID

# GitはSHA-1を使用 (各コミットの固有ID)
$ git log --oneline
a591a6d Fix bug in login
b10a8db Add new feature

5. キャッシュキー生成

const cacheKey = md5(`user:${userId}:profile`);
cache.set(cacheKey, userData);

6. データ重複排除

const contentHash = sha256(fileContent);
if (seenHashes.has(contentHash)) {
console.log('重複ファイル');
} else {
seenHashes.add(contentHash);
}

ハッシュ衝突

衝突とは?

異なる入力が同じハッシュを生成する場合:

input1 ≠ input2
hash(input1) = hash(input2) ← 衝突!

アルゴリズム別衝突耐性

アルゴリズム衝突耐性状態
MD5❌ 非常に弱い2004年から衝突発見
SHA-1❌ 弱い2017年実際の衝突公開
SHA-256✅ 強い現在まで安全
SHA-512✅ 非常に強い現在まで安全

衝突確率

SHA-256の場合:

  • 可能なハッシュ数: 2^256 ≈ 1.16 × 10^77
  • 誕生日のパラドックスで50%衝突確率: 2^128回の試行が必要
  • 実用的に不可能!

プログラミング言語別使用法

JavaScript (ブラウザ)

async function sha256(text) {
const encoder = new TextEncoder();
const data = encoder.encode(text);
const hash = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hash));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

const hash = await sha256('Hello World');

JavaScript (Node.js)

const crypto = require('crypto');

const hash = crypto.createHash('sha256')
.update('Hello World')
.digest('hex');

Python

import hashlib

# SHA-256
hash_sha256 = hashlib.sha256('Hello World'.encode()).hexdigest()

# MD5
hash_md5 = hashlib.md5('Hello World'.encode()).hexdigest()

PHP

<?php
// SHA-256
$hash = hash('sha256', 'Hello World');

// MD5
$hash = md5('Hello World');
?>

Java

import java.security.MessageDigest;

MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest("Hello World".getBytes());

StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}

Bash

# SHA-256
echo -n "Hello World" | sha256sum

# MD5
echo -n "Hello World" | md5sum

セキュリティベストプラクティス

✅ 正しい使用法

1. パスワード保存 (Salt + Hash)

const bcrypt = require('bcrypt');

// パスワードハッシュ化
const hash = await bcrypt.hash(password, 10);

// 検証
const isValid = await bcrypt.compare(password, hash);

2. API署名検証

const expectedSignature = sha256(payload + secret);
if (receivedSignature === expectedSignature) {
// 有効なリクエスト
}

3. ファイルチェックサム

const fileHash = sha256(fileContent);
// ダウンロード後検証

❌ 間違った使用法

1. パスワードを単純なハッシュのみ使用

// 間違い!
const hash = md5(password);

// レインボーテーブル攻撃に脆弱

2. MD5をセキュリティ目的で使用

// 間違い!
const signature = md5(data + secret);

// 衝突攻撃が可能

3. ハッシュだけで認証

// 間違い!
if (requestHash === sha256(userId)) {
// 予測可能
}

実用的なヒント

1. Saltの使用 (パスワード)

// Saltの追加でレインボーテーブル攻撃を防御
const salt = crypto.randomBytes(16).toString('hex');
const hash = sha256(password + salt);

// 保存: { hash, salt }

2. HMACの使用 (署名)

// 単純なハッシュよりHMACが安全
const hmac = crypto.createHmac('sha256', secret)
.update(data)
.digest('hex');

3. 遅いハッシュの使用 (パスワード)

// bcrypt、scrypt、argon2は意図的に遅い
// ブルートフォース攻撃を防御
const hash = await bcrypt.hash(password, 12); // rounds

4. ファイルハッシュのストリーミング

// 大きなファイルはストリーミングで処理
const hash = crypto.createHash('sha256');
const stream = fs.createReadStream('largefile.bin');
stream.on('data', chunk => hash.update(chunk));
stream.on('end', () => {
console.log(hash.digest('hex'));
});

ハッシュ vs 暗号化

ハッシュ (Hash)

  • 一方向: 復号化不可能
  • 固定長: 入力サイズに関係なく
  • 決定的: 同じ入力 → 同じ出力
  • 用途: 整合性検証、パスワード保存

暗号化 (Encryption)

  • 双方向: 復号化可能
  • 可変長: 入力に比例
  • 非決定的: 毎回異なる出力が可能
  • 用途: データ保護、通信セキュリティ

よくある質問

Q: MD5を使用しても良いですか?

セキュリティ目的では絶対にダメです。チェックサムや非セキュリティ用途のみで使用してください。

Q: ハッシュでパスワードを保存しても良いですか?

単純なハッシュは安全ではありません。bcrypt、argon2、scryptのような専用アルゴリズムを使用してください。

Q: SHA-256とSHA-512のどちらが良いですか?

  • SHA-256: ほとんどの場合十分、広く使用されている
  • SHA-512: より強力だが遅い可能性がある (64ビットシステムでは速い場合がある)

一般的にSHA-256を推奨!

Q: ハッシュを解読できますか?

いいえ。ハッシュは一方向関数です。ただし、レインボーテーブルで弱いパスワードは推測可能です。

Q: 同じハッシュが出る可能性はありますか?

理論的には可能ですが(鳩の巣原理)、SHA-256の場合実用的に不可能です。

Q: ファイルハッシュはどのように計算しますか?

このツールはテキストのみサポートしています。ファイルハッシュはコマンドラインツールや専用プログラムを使用してください。

関連ツール

パフォーマンス

  • 生成速度: ミリ秒未満 (テキスト基準)
  • リアルタイム処理: 入力即座に生成
  • メモリ使用: 最小限
  • オフライン動作: 完全サポート

ブラウザ互換性

このツールはWeb Crypto APIを使用します:

  • Chrome (すべてのバージョン) ✓
  • Firefox (すべてのバージョン) ✓
  • Safari 11+ ✓
  • Edge (すべてのバージョン) ✓

💬 このツールは役に立ちましたか?

ハッシュ生成器を使用して、データの整合性検証やセキュリティ機能の実装ができましたか?フィードバックや改善提案がありましたら、お聞かせください。

プライバシー保護

このツールは完全にクライアント側で動作します。入力したデータはサーバーに送信されず、ブラウザ内でのみ処理されます。