MD5

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
MD5で自分が作成した暗号キーを付けられると聞いたのですが、暗号キー鍵の付け方がみつからないです。
コマンドプロンプトで引数一つを必要としたPGを作成してみました。
import java.security.MessageDigest;
import java.security.*;
import java.io.FileInputStream;
public class Digest {
public void printDigest(byte[] digest) {//ダイジェストを16進数で表示する
for (int i = 0; i < digest.length; i++) {
int d = digest[i];
if (d < 0) {//byte型では128〜255が負値になっているので補正
d += 256;
}if (d < 16) {//0〜15は16進数で1けたになるので、2けたになるよう頭に0を追加
System.out.print("0");
}System.out.print(Integer.toString(d, 16));//ダイジェスト値の1バイトを16進数2けたで表示
}
}
public byte[] getStringDigest(String data) throws Exception {//文字列からダイジェストを生成する
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] dat = data.getBytes();
md.update(dat);//dat配列からダイジェストを計算する
return md.digest();
}
public static void main(String args[]) throws Exception {
if (args.length!=1){
System.out.println("引数はひとつです。");return;
}if (args.length>=1){
System.out.println("1番目のパラメタは"+args[0]+"でした");
}
Digest d = new Digest();
d.printDigest(d.getStringDigest("12345"));
}
}
2デフォルトの名無しさん:2006/07/07(金) 22:42:27
MD5(笑)
3デフォルトの名無しさん:2006/07/07(金) 23:05:45

    M   し!     _  -── ‐-   、  , -─-、 -‐─_ノ
  チ D    // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )  M え
  ェ 5    L_ /                /        ヽ  D  |
  ッ が    / '                '           i 5 >>1
  ク 許    /                 /           く !?  っ
  サ さ    l           ,ィ/!    /    /l/!,l     /厶,   て
  ム れ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ
  だ る   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ
  け の   _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ      ,イ ̄`ヾ,ノ!
  よ は  「  l ′ 「1       /てヽ′| | |  「L!     ' i'ひ}   リ
  ね     ヽ  | ヽ__U,      、ヽ シノ ノ! ! |ヽ_、ソ,      ヾシ _ノ _ノ
-┐    ,√   !            ̄   リ l   !  ̄        ̄   7/
  レ'⌒ヽ/ !    |   〈       _人__人ノ_  i  く            //!
人_,、ノL_,iノ!  /! ヽ   r─‐- 、   「      L_ヽ   r─‐- 、   u  ノ/
      /  / lト、 \ ヽ, -‐┤  ノ  キ    了\  ヽ, -‐┤     //
ハ キ  {  /   ヽ,ト、ヽ/!`hノ  )  モ    |/! 「ヽ, `ー /)   _ ‐'
ハ ャ   ヽ/   r-、‐' // / |-‐ く    |     > / / `'//-‐、    /
ハ ハ    > /\\// / /ヽ_  !   イ    (  / / //  / `ァ-‐ '
ハ ハ   / /!   ヽ    レ'/ ノ        >  ' ∠  -‐  ̄ノヽ   /
       {  i l    !    /  フ       /     -‐ / ̄/〉 〈 \ /
4デフォルトの名無しさん:2006/07/08(土) 00:09:06
>>1 に MK5
5デフォルトの名無しさん:2006/07/08(土) 08:21:39
MD5 を文字列表現するとして、
MD5 の MD5 の MD5 ・・・
ってつなげていったらいつか戻ってくるよね?
有限個数しかないんだから。
6デフォルトの名無しさん:2006/07/08(土) 10:13:39
よくわからんが衝突耐性の事を言ってるのか?
つなげていく?
7デフォルトの名無しさん:2006/07/08(土) 12:55:51
MD5("aaaa")
MD5(MD5("aaaa"))
MD5(MD5(MD5("aaaa")))
...
てことか??
8デフォルトの名無しさん:2006/07/08(土) 13:01:29
>>7 そうそう。それ。
別に何か意味がある訳じゃなくて、
単にそうやってつなげた全MD5値の
有向グラフってどんなカタチなんだろーなー
っていうとりとめもない興味。
9デフォルトの名無しさん:2006/07/08(土) 13:21:14
どの初期値で開始しても
有限個数しかないんだからいつか戻る
は正しいと思う

周期はまちまち?分布は?最大の周期は?最小の周期は?
激しくどうでもいいな
10デフォルトの名無しさん:2006/07/08(土) 18:58:11
MTのこと言ってるの?
11デフォルトの名無しさん:2006/07/08(土) 19:09:22
MD5って破られてるというかその半歩手前なんじゃないか?
今更なにに使うというんだ。
12デフォルトの名無しさん:2006/07/08(土) 19:11:38
ハッシュが「破られる」っていうのは具体的には
与えられたハッシュ値を持つような何らかの
データを十分短い時間で生成できる、ということなのかな?
13デフォルトの名無しさん:2006/07/08(土) 19:51:14
まあそういうこと。
14デフォルトの名無しさん:2006/07/09(日) 00:01:08
>>1が聞きたいことは、
通常のMD5ではなく、なんかしら暗号キー(例:"9999999999")を使って
Javaで暗号化できないか?ということでは?
(3DESなら、暗号キー使ったPGなら見たことあるが、
MD5でもできるのかとかそういうことでは?)
15デフォルトの名無しさん:2006/07/09(日) 00:02:41
そういう有名どころのハッシュはいくらでも実装があるような気がする。
16デフォルトの名無しさん:2006/07/09(日) 00:07:49
>>15
14です。
3DESならネットで見たことあるが、
MD5をJAVAで暗号キー使ったPGは見たことない。どこかありますか?
17デフォルトの名無しさん:2006/07/09(日) 00:34:01
18デフォルトの名無しさん:2006/07/09(日) 00:52:23
大本の発想はきわめて単純。
キーをくっつけてハッシュをとればいい。
そのハッシュ値はキーを知らないと作り出せない。
19デフォルトの名無しさん:2006/07/09(日) 14:47:43
>>18
1はたぶん初心者だからわかりやすく、
実際にプログラム書いてあげれば?

20デフォルトの名無しさん:2006/07/09(日) 15:57:36
HMAC-MD5とかHmacMd5とか、
そんな感じのアルゴリズム名で使えるやつあるだろ多分。

ちゃんとしたアルゴリズムじゃなくて適当にやるだけなら、
ハッシュの計算に使う元データにキーをくっつけてから計算しろ。

てか俺Java知らねーんだよ、だからこれで許してね。
21デフォルトの名無しさん:2006/07/09(日) 17:11:04
>>14
共通鍵暗号方式の「3DES」とハッシュ関数の「MD5」を同列に語る意味が分からん。
根本的に用途が違う。
22デフォルトの名無しさん:2006/07/09(日) 18:01:26

同じものではないが同列に語る意味はあるな
23デフォルトの名無しさん:2006/07/09(日) 19:06:44
塩つけれ、塩。
24デフォルトの名無しさん:2006/07/09(日) 19:43:32
どこに(何に)つけろって言ってるんだい?
25デフォルトの名無しさん:2006/07/09(日) 20:02:02
塩は二倍と
2621:2006/07/09(日) 23:02:11
>>22
どういう部分が同列に語る意味があるのか、よろしければ教えてください。
個人的に↓のように理解しています。

3DES = 鍵 と 平文
MD5 = 平文

MD5には3DESにある鍵にあたる部分がないため、>>21では同列に語る意味がないといいました。
27横レス:2006/07/09(日) 23:58:57
DES(暗号化関数)をそのままハッシュ関数として使うのはまあわかる
UNIXのpasswdとか

MD5(一方向性ハッシュ関数)は暗号化関数ではない、というのもまあわかる
出力はビット数減ってるし

平文が複数個のブロックからなるとき、一方向性ハッシュ関数と鍵とある平文ブロックを使ってマスクを生成し
次の平文ブロックにXORすることで暗号化を行う、という共通鍵ブロック暗号方式があったような気もする
最初の平文ブロックのマスクは初期値から作るのかな
28デフォルトの名無しさん:2006/07/10(月) 00:11:15
ああ三番目は全くの間違いだった
一方向性ハッシュ関数から暗号方式を作るんじゃない
暗号方式からMACを作るんだ
http://www.cryptrec.jp/topics/cryptrec_20060525_c05report.html
29デフォルトの名無しさん:2006/07/10(月) 00:28:35
>>21
おまえさあ、きちんと分かってて書いてるのかと思ったら違ったのな。

>3DES = 鍵 と 平文
>MD5 = 平文
>MD5には3DESにある鍵にあたる部分がないため、>>21では同列に語る意味がないといいました。

はじめから鍵つきMD5の話だろうに。
30デフォルトの名無しさん:2006/07/10(月) 21:27:53
>>21じゃないけど
鍵つきのMD5は3DESとなんの関係もないと思うんだけど

鍵の決め方とかそういうハナシ?
ならハッシュを持ち出す意味がわからんし・・・
31横レス:2006/07/10(月) 21:44:10
keyed hashのkeyを暗号キーなどと呼ぶから話が混乱するのでは

そもそも>>14
>暗号化できないか?ということでは?
が,「HMACを作る」ことを言ってるのか
「共通鍵暗号方式を作る」ことを言っているのかもよくわからないし
32デフォルトの名無しさん:2006/10/11(水) 19:30:42
あげ
33デフォルトの名無しさん:2006/10/23(月) 20:25:14
md5make 1.08a
ttp://www.vector.co.jp/soft/dl/win95/util/se136327.html

                            MD5をチェックする前に言っておくッ!
                    おれは今やつのソフトをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれはアイコンの上にD&Dしていたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにかHelpをクリックしていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    バグだとかジョークソフトだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…
34デフォルトの名無しさん:2007/04/02(月) 20:18:31
…なぁ、MD5単体でやるのは暗号化じゃなくて暗号証明じゃないのか?
暗号化にするなら別の暗号化アルゴリズム必須じゃないかと。
概要だと、
・MD5(pass)を保存して、証明するときにpassを入力させてMD5(pass)と保存してある値を比較する。一致ならOK
・MD5(pass)をキーにして別のアルゴリズムで暗号化する。復号化するときにpassを入力させてMD5(pass)をキーにして暗号化に使ったアルゴリズムの対で復号する。
だろ?場合によってはMD5_(pass)=MD5(内部キー+pass)ってしてMD5_を使ったり。

こういう話じゃない?
35デフォルトの名無しさん:2007/04/26(木) 12:54:24
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 次のような、左上を直角とし「+-」からなる三角形図を作りなさい
                 +-+-+
+-+-
+-+
+-
+
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio .NET
 [3.3] 言語: C
[4] 期限:5月2日
36デフォルトの名無しさん:2007/04/26(木) 12:55:46
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 次のような、左上を直角とし「+-」からなる三角形図を作りなさい
+-+-+
+-+-
+-+
+-
+
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio .NET
 [3.3] 言語: C
[4] 期限:5月2日
37デフォルトの名無しさん:2007/04/26(木) 12:57:25
[1] 授業単元:C言語
[2] 問題文(含コード&リンク): 次のような、左上を直角とし「+-」からなる三角形図を作りなさい
+-+-+
+-+-
+-+
+-
+
[3] 環境
 [3.1] OS: Windows XP
 [3.2] コンパイラ名とバージョン: Visual Studio .NET
 [3.3] 言語: C
[4] 期限:5月2日
38デフォルトの名無しさん:2007/04/26(木) 13:00:10
main(){ printf("+-+-+\n+-+-\n+-+\n+-\n+\n"); }
39test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32