DES 鍵の長さ
8 / 16 / 24 バイト 単一 DES:8 バイト(実効 56 ビット)。3DES:16 バイト(2鍵)または 24 バイト(3鍵)。名目上の鍵材料は 112/168 ビット、NIST の有効セキュリティ強度は約 80/112 ビット(SP 800-57)。本ツールはバイト数から自動判定し、その他の長さはエラーになります。
ブラウザで DES の暗号化・復号:単一 DES、3DES(2鍵・3鍵)、ECB/CBC、PKCS#7(Java の PKCS5Padding)、Zero またはパディングなし。鍵長は厳密に検証され、CryptoJS や openssl enc -K のように黙って切り詰められることはありません。すべての結果に等価な OpenSSL コマンドが付きます。自分の実装を突き合わせるための FIPS 81 テストベクタ付き。データは一切アップロードされません。
ECB は同じブロックを同じ暗号文ブロックにし、パターンが漏れます — 要求するシステムと接続する場合だけ使ってください。
—
コマンドには入力した鍵が含まれます。
| 鍵(単一 DES) | 0123456789abcdef |
|---|---|
| 平文 | 4e6f772069732074 |
| 暗号文(ECB、パディングなし) | 3fa40e8a984d4815 |
暗号ツールを開発している開発者自身が執筆・レビューしています。このページのすべての暗号文とバイト数はツールのエンジンで計算され、テストで検証されています。
8 / 16 / 24 バイト 単一 DES:8 バイト(実効 56 ビット)。3DES:16 バイト(2鍵)または 24 バイト(3鍵)。名目上の鍵材料は 112/168 ビット、NIST の有効セキュリティ強度は約 80/112 ビット(SP 800-57)。本ツールはバイト数から自動判定し、その他の長さはエラーになります。
3fa40e8a984d4815 鍵 0123456789abcdef、平文 "Now is t"(hex 4e6f772069732074):単一 DES ECB・パディングなしでは 3fa40e8a984d4815 が出力されます。
8 バイト 8 バイト(16 桁 hex)。CBC のみで、ECB では使いません。AES の 16 バイト IV とは別物です。
= PKCS#7 DES に対しては PKCS#7 です — 歴史的な名前を持つ同一のパディングアルゴリズム(PKCS#5 が定義していたのは 8 バイトブロックで、それがたまたま DES のブロックでした)。
レガシー互換のみ いいえ。単一 DES は 2005 年に廃止、3DES は SP 800-131A Rev.2(2023)で非推奨。レガシー互換のみ — 新規には AES-256 を使ってください。
DES(Data Encryption Standard)は 1977 年に米国の標準化機構が採用した共通鍵ブロック暗号です。IBM の Lucifer 設計を基礎としています。64 ビット(8 バイト)ブロックを、実効 56 ビットの名目 64 ビット鍵で、Feistel 構造の 16 ラウンドで処理します。
3DES(TDEA、Triple DES)は短い鍵を補うため DES を 3 回連ねます:C = E_K3(D_K2(E_K1(P)))。中央のパスが復号になっているため、K1=K2=K3 とすればチェーンは単一 DES に縮退します — 意図的な互換性の選択です。2鍵形(K3=K1)は実効約 112 ビットで、レガシー銀行システムで最も一般的な形です。
NIST は 2005 年に単一 DES を廃止し(FIPS 46-3 の通知)、2023 年に SP 800-131A Rev.2 で 3DES を非推奨としました。今も存在する唯一の理由は レガシー互換 です。銀行の交換システム、決済ゲートウェイ、90 年代・2000 年代の Java/.NET/PHP システムは今も DES 時代の暗号を動かしています。新しい設計には AES-256 を使うべきです。
# OpenSSL single DES (legacy provider) openssl enc -des-ecb -provider legacy -provider default -K 0123456789abcdef -nopad # 3-key 3DES CBC + PKCS#7 (default provider) openssl enc -des-ede3-cbc -K <48 hex digits> -iv <16 hex digits> -base64 -A
8/16/24 バイトは自動判定で単一 DES / 2鍵 / 3鍵 3DES として扱われ、それ以外はエラーになります。CryptoJS の黙った切り詰めや openssl enc -K の「切り詰めて警告」と違い、誤った鍵ははっきり失敗します — 相互運用不一致の最大の原因です。
ページ下部のテストベクタ表は同じエンジンでビルド時に計算されるため、クローラは JS を実行せずに参照値を読め、表示される数値が対話ツールからずれることはありません。
すべてのパラメータの組み合わせが、OpenSSL 3 で同じ結果を再現する openssl enc コマンドに対応します(単一 DES では legacy-provider のフラグを含む)。相手側に送ってパラメータの食い違いを突き止められます。
DES 時代の Java の getBytes() は中国語 Windows の JDK では GBK を返します。ここでは双方向とも GBK を受け付けるため、旧システムの中国語平文は事前変換なしで扱えます。
純 TypeScript、依存ゼロ、ネットワーク要求ゼロ。鍵と平文は端末の外に出ず、読み込み後はオフラインで動作します。鍵を扱うツールとして唯一許容できる形です。
"DES" は既定で ECB + PKCS5Padding Cipher.getInstance("DES") は DES/ECB/PKCS5Padding と同等です。"DESede" は 3DES ですが 24 バイトの鍵のみ受け付けます — 2鍵は K1‖K2 を K1‖K2‖K1 に展開してください。PKCS5Padding は DES に対しては PKCS#7 です。IV を省略すると、暗号化ではランダム IV が選ばれ(getIV() で取得)、復号では "Parameters missing" が投げられます。
des-ede3-cbc / des-ede-cbc アルゴリズム名は OpenSSL に従います:des-ede3 は 3 重 ECB、des-ede3-cbc は CBC。$options=0(既定)は Base64 文字列 を出力し、生バイトには OPENSSL_RAW_DATA。短い鍵は 黙って 0 埋め され、空の IV は警告の後 ゼロ IV で暗号化します。
-des-ede3-cbc は既定で動作 単一 DES には -provider legacy -provider default が必要です(ビルドによっては legacy 自体がない)。-K/-iv は hex を取ります。既定は PKCS#7、-nopad で無効化。-K は長すぎる鍵を警告付きで切り詰めます。
8 バイトの生鍵(WordArray)なら動作します。誤った長さは 黙って 0 埋めまたは切り詰め されます(4 バイトは埋め、10 バイトは切り詰め — エラーなし)。文字列を「鍵」として渡すと鍵導出が走ります(MD5 + ランダムソルト、出力は Salted__ で始まり毎回変わる)。IV なしの CBC はゼロ IV ではなく TypeError クラッシュです。8 バイト鍵の TripleDES は黙って単一 DES になります。
TripleDES は既定で CBC + PKCS7 TripleDESCryptoServiceProvider:Mode=CBC、Padding=PKCS7、鍵は 16 または 24 バイト(DES は 8 バイト)。.NET は弱い鍵を拒否します(まずパリティを正規化し、それから弱い鍵のテーブルと照合 — ゼロ鍵は例外を投げる)が、他のすべてのライブラリは受け付けます。移行時の注意点です。
des.NewCipher は 8 バイト鍵の生のブロックインターフェースを返し、cipher.NewCBCEncrypter などは自分で組み合わせます。3DES は des.NewTripleDESCipher(24 バイト)。IV 長のチェックは他のほとんどの言語より厳密です。
鍵 0123456789abcdef、平文 (hex) 4e6f772069732074
3fa40e8a984d4815
平文は ASCII 文字列 "Now is t" です。教科書通りの FIPS 81 ベクタであり、ページ下部の表は同じエンジンでビルド時に計算されています — あなたの DES 実装がこの入力に対してこの値を出さないなら、バグがあります。
鍵 0123456789abcdeffedcba9876543210(16 バイト)、IV fedcba9876543210、平文: DES interop test: order 20260927-0042
QmnMoewSecp7Z7cr/w3/4AjM9lpFo1swc4dfLNH5UkgCwU5n7WIdKA==
16 バイトの鍵は 2鍵 3DES として扱われます(K1 = 先頭 8 バイト、K2 = 末尾 8 バイト、K3 = K1 — EDE2 構成)。8 バイトブロックに対する PKCS#7 は、Java が DES に対して "PKCS5Padding" と呼ぶものそのものです:スキームは同じで、ブロックサイズだけが違います。
鍵 0123456789abcdef23456789abcdef010456789abcdef012(24 バイト)、IV fedcba9876543210、平文: hello des
DhDQX9sfxKOirZ8eyqT7Jg==
24 バイトの鍵は完全な 3 鍵の EDE3 です:C = E_K3(D_K2(E_K1(P)))。3 つの鍵長の中で、退化した等価形を持たないのはこの形だけです — 2鍵も K1=K2=K3 もより弱い暗号に縮退します。
Java の DES/ECB/PKCS5Padding なら ECB + PKCS#7、openssl enc -des-ede3-cbc なら CBC + PKCS#7 を選択します。古い PHP mcrypt コードはたいてい Zero パディングを使っています。
バイト数が暗号方式を決めます:8 = 単一 DES、16 = 2鍵 3DES、24 = 3鍵 3DES。Hex・Text・Base64 を選択でき、バッジに実際のバイト数と判定された形が表示されます。誤った長さはエラーになります — 何も切り詰められません。
ECB に IV は不要です。IV はちょうど 8 バイト — 16 桁の hex で、AES の 32 桁ではありません。ランダムボタンで新しい IV を生成できます。
暗号化:テキスト(UTF-8/GBK)または hex を入力。復号:Base64 または hex の暗号文を貼り付け。入力に合わせて結果が即時更新され、ワンクリックコピーと「この暗号文を復号」ボタンでの往復チェックに対応しています。
折りたたみパネルは現在の結果を再現する openssl enc コマンドを生成します(鍵付き。単一 DES のコマンドには -provider legacy -provider default が付きます)。相互運用相手に送れば、どちらのパラメータが間違っているかを最速で確定できます。
32 桁 hex の「DES 鍵」は 16 バイト — これは 2鍵 3DES であり単一 DES ではありません。逆に、2鍵しか扱えないシステムに 24 バイトの鍵を渡しても失敗します。
鍵 0123456789abcdeffedcba9876543210(16 バイト)を単一 DES で選択 → エラー「鍵はちょうど 8 バイトでなければなりません」
同じ鍵を 16 バイト(2鍵 3DES)として → 正常に復号
Java は DES に対して "PKCS5Padding" と書きますが、実行しているのは PKCS#7 アルゴリズムです(PKCS#5 が定義していたのは 8 バイトブロックのパディングだけで、それが DES のブロックだったため名前だけ残りました)。JCE の暗号文に対して None や Zero を選ぶと必ず失敗します。
JCE の `DES/ECB/PKCS5Padding` 暗号文を「パディングなし」で復号 → 末尾にゴミまたは不正パディングエラー
PKCS#7(Java PKCS5Padding)を選択 → クリーンな出力
DES のブロックは 8 バイトなので、IV も 8 バイトです。AES のコードから 32 桁の hex の IV を貼ると長さチェックで失敗し、8 桁の hex の IV は 0 埋めされて誤って解釈されます。
IV 00000000000000000000000000000000(32 桁 hex)→ エラー「IV は 8 バイトでなければなりません」
IV 0000000000000000(16 桁 hex)→ 受け付けられる
複数ブロックの暗号文を間違った IV で復号しても エラーにはなりません — 最初の 8 バイトブロックだけが壊れ、残りは正しく復号されます(IV が届くのは第 1 ブロックだけで、パディングの検査は最終ブロックで行われるため)。「先頭の数文字だけ化けて、あとは正常」のときは、鍵より先に IV を疑ってください。逆に単一ブロックの暗号文ではパディングが壊れて bad decrypt エラーになります。
複数ブロックの暗号文 + 誤った IV → 先頭 8 バイトだけ化けて残りは正常 — 「鍵が違う」と誤読
IV だけ変える(鍵はそのまま)→ 先頭ブロックが復元され、IV が原因と確定
-K は必要な分だけのバイトを残し、スクリプトに呑み込まれる 1 行の警告を出すだけです。相手が「鍵はこの 48 桁の hex」と言っていても実際には先頭 16 バイトで暗号化していた場合、鍵全体で復号しても失敗します。
シェル:`-K <49 桁 hex>` → 「hex string is too long, ignoring excess」がパイプラインに消える
本ツールの等価コマンドで正しい長さの `-K` を生成し、鍵のバイト列を相手側と比較する
OpenSSL 3 の既定 provider には des-ecb/des-cbc がありません。そのまま実行すると digital envelope routines::unsupported になります。-provider legacy -provider default を付けるか、K‖K‖K の des-ede3(代数的には単一 DES)を使ってください。
openssl enc -des-ecb -K … → エラー:unsupported
openssl enc -des-ecb -provider legacy -provider default -K …(または des-ede3-ecb -K <K‖K‖K>)
Cipher.getInstance("DES/ECB/PKCS5Padding") の出力や openssl_encrypt(..., 'des-ede3-cbc', ...) の出力を本ツールとバイト単位で突き合わせます。2鍵/3鍵の形は鍵長から判定されるため、推測する箇所はありません。03 03 03)、満杯のブロックには丸ごと 1 ブロック追加します — これが DES に対する Java の "PKCS5Padding" です。Zero パディングは 0x00 で埋め、平文が実際に 0x00 で終わっている場合は可逆ではありません。None は 8 の整数倍を要求します。-provider legacy -provider default が必要で、一部のビルド(Node 同梱の OpenSSL を含む)では legacy 自体が入っていません。3DES(des-ede/des-ede3)は既定の provider に残っています。本ツールの純 TS エンジンは影響を受けません。PKCS5Padding は DES に対しては PKCS#7 そのもの — None を選ばないこと)。右側の折りたたみパネルは現在の設定に対する等価な OpenSSL コマンドを表示します。これを相手側に送るのが食い違いを見つける最短ルートです。 openssl enc -K は黙って切り詰めるか 0 埋めするため、これが相互運用失敗の最大の原因です。 DES/ECB/PKCS5Padding は本ツールでは何に対応しますか?Cipher.getInstance("DES/ECB/PKCS5Padding") の出力は、ECB + PKCS#7 と 8 バイトの単一 DES 鍵でここで復号できます。⚠️ Java の 3DES(DESede)は 24 バイトの鍵のみ受け付けます — 2鍵形は K1‖K2 を自分で K1‖K2‖K1 に展開する必要があります。 des-ede3-cbc は 3鍵 3DES + CBC、des-ede3-ecb は 3鍵 + ECB;des-ede-cbc は 2鍵形です。24 バイトの鍵なら 3鍵、16 バイトなら 2鍵が選ばれます。 "DES" は既定で ECB、OpenSSL のモード接尾辞なしの名前 des-ede3/des-ede は ECB(CBC の別名は -des3);PHP の openssl_encrypt はアルゴリズム名を明示する必要があり、紛らわしいのは既定で生バイトではなく Base64 文字列を出力する点;③ パディング — 古い PHP mcrypt は Zero をよく使い、JCE は PKCS#5/#7;④ エンコーディング — hex か Base64 か、大文字小文字;⑤ CryptoJS のパスワード落とし穴 — 文字列を「鍵」として渡すと鍵導出が走ります(MD5 + ランダムソルト、出力は Salted__ で始まり毎回変わる)。これは生の鍵ではまったくありません — 「同じコードなのに実行ごとに結果が違う」の最大の原因です。本ツールでは各項目を切り替えられ、右側の等価 OpenSSL コマンドを相手側に送って再現できます。 セキュリティツール
AESをオンラインで復号 — GCM/CBC/CTR、パスフレーズまたは生鍵に対応し、OpenSSLとCryptoJSの「U2FsdGVkX1」形式を自動検出します。処理は100%ブラウザ内で完結し、鍵がこのページから出ることはありません。
セキュリティツール
無料のAESオンライン暗号化ツール — AES-128/192/256、GCM/CBC/CTR、パスフレーズ(PBKDF2)または生鍵に対応。処理は100%ブラウザ内で完結し、外部にアップロードされません。
セキュリティツール
bcrypt パスワードハッシュをオンラインで生成・検証。コスト調整、$2b$/$2a$/$2y$ プレフィックス対応。100% ブラウザ内で処理し、パスワードは一切送信されません。
セキュリティツール
16進数またはテキストを貼り付けるだけで、CRC-8・CRC-16・CRC-32 の全63変種を一度に算出します。手元のチェックサムと一致しない場合は期待値を入力すれば、MODBUS・CCITT-FALSE・XMODEM・KERMIT のどれかを自動で特定。処理はすべてブラウザ内で完結します。
セキュリティツール
無料のオンライン HMAC 生成・検証ツール。Text・Hex・Base64 の鍵で HMAC-SHA256/SHA1/SHA384/SHA512 を計算し、Hex/Base64/Base64URL で出力します。100% ブラウザ内で完結 —— 鍵はページから外に出ません。
セキュリティツール
JWTトークンを無料のJWTデコーダーでオンラインデコード。ヘッダー、ペイロード、署名、有効期限、アルゴリズム、クレームを即座に検査できます。100%ブラウザ動作 — トークンはデバイスから外に出ません。登録不要、追跡なし。