MD5アルゴリズムのメッセージ処理について

このQ&Aのポイント
  • MD5アルゴリズムのメッセージ処理についての要約文1
  • MD5アルゴリズムのメッセージ処理についての要約文2
  • MD5アルゴリズムのメッセージ処理についての要約文3
回答を見る
  • ベストアンサー

MD5アルゴリズムのメッセージ処理について

RFC1321を読んでいるのですが、3.4のところのメッセージ処理が何をしているのかよく分かりません。 以下が書かれていますが、[]の中身を計算した結果が左辺のaになるのでしょうか?(でも、右辺のaとは違いますよね?…) また、[]がなんこも並んでいるのは何をするのでしょうか?bit列を結合するということでしょうか? /* 以下の演算を、[abcd k s i] で表す: a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) */ /* 次の16の処理を実行する */ [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] http://www.ipa.go.jp/security/rfc/RFC1321JA.html#3

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

> [abcd k s i] で表す: > a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s) ですから,「次の16の処理を実行する」のうち最初の4つだけ例示するならこうでしょう。 [ABCD 0 7 1] A = B + ((A + F(B,C,D) + X[0] + T[1]) <<< 7) [DABC 1 12 2] D = A + ((D + F(A,B,C) + X[1] + T[2]) <<< 12) [CDAB 2 17 3] C = D + ((C + F(D,A,B) + X[2] + T[3]) <<< 17) [BCDA 3 22 4] B = C + ((B + F(C,D,A) + X[3] + T[4]) <<< 22)

関連するQ&A

  • 交換関係

    スピン演算子を→S、軌道角運動量演算子を→Lとするとき、これらと可換なベクトル→Aに対して、以下の関係が成立することを示せ。    [→S,→S・→A]=-i(→S×→A) という問題なのですが、どのようにアプローチしていいのかわかりません。 →Sのx成分のみを調べてみましたが、左辺と右辺は一致しませんでした。 どなたかご教授お願いします。

  • ビット演算について

    プログラムを実行した結果が、 10101010 × 11001100 = 10011001 (=の右辺は、演算方法として×の左辺と右辺のNOT XOR、演算処理は1行で行う。) と表示できるプログラムを作成したいのですがよくわかりません。 どなたか教えていただけないでしょうか?よろしくお願いします。

  • 不等式の証明

    不等式の証明の問題で、 絶対値が1より小さい4つの実数a,b,c,dに対して、次の不等式が成り立つことを示せ。というものがありました。(1),(2)と2問あって (1)はa+b<1+abの証明でした。 これは(右辺)-(左辺)をして(a-1)(b-1)>0となり、証明できました。 (2)は(1)を利用して示せ。となっており (2)はa+b+c+d<3+abcdの証明でした。 (1)よりa+b<1+abなのでc+d<1+cd 辺々加えてa+b+c+d<2+ab+cd ここまではできたのですが、ここからどうやって右辺を3+abcdに するのかどうしてもわかりません。 答えにはa+b+c+d<2+ab+cd            <2+(1+abcd)            <3+abcd と書かれていたのですがどうしても    <2+ab+cd          ↓    <2+(1+abcd) が分かりません。教えてください!            

  • 正規表現の置換演算子に変数を埋め込むことをしたいのですが

    正規表現の置換演算子に変数を埋め込むことをしたいのですが $a = 'abcd0001'; $b = '0005'; $a =~ s/abcd([0-9]{4})/abcd\$b/; #=> $a=[abcd$b] print "\$a=[$a]\n"; とすると、abcd$bとなります。 置換演算子1行で、abcd0005とする方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • 因数分解

    度々お世話になります。また、今後もお世話になると思います。 不等式の証明問題です。 「a、b、c、dが正の数であるとき、(ab+cd)(ac+bd)≧4abcdを証明しろ」 左辺-右辺≧0を示す。 左辺-右辺=bc(a^2+d^2)+ad(b^2+c^2)-(4abcd) =bc(a^2+2ad+d^2)+ad(b^2-2bc+c^2)=bc(a-d)^2+ad(b-c)^2……★ aもbもcもdも正の数なので、★は0以上。よって、命題の不等式は成り立つ。 証明の流れはほぼ正しかったのですが(ただ左辺-右辺≧0を示せば良いだけなので)、この因数分解は、ヒントが無ければ導けませんでした。特に不等式の証明に限らず、多項式をうまく因数分解するための工夫やアイディアというのはあるのでしょうか。例えば、2倍したのを1/2で表すみたいな工夫をするきっかけというか… アドバイスお願い致します。

  • インクリメント/デクリメント演算子を使った計算

    Javaでのインクリメント演算子とデクリメント演算子を 使った計算についての質問です。 int a = 10; int b = a++ + ++a + --a - a--; このコード処理後の変数a,bの値の計算方法(考え方)が つかめず苦戦しています。 解答はa=10,b=22だそうです。 ちなみに例えば次のコードのb=a++;のように 右辺と左辺が1つずつの場合は理解しやすいです。 int a = 1; int b = 0; b = a++; //処理A 処理A後の変数a,bの値は b=aをした後でa=a+1を行うので a=2,b=1 となることは理解できます。 ご教授のほどよろしくお願いします。

  • 連続した行を一行にして出力したい

    こんばんは。 自分の力では解決できないので、お力をお貸しいただけないでしょうか。 以下のようなフォーマットのデータがあります。 「--」で一区切りです。 a b c d -- e f g h -- i j k l -- これを、以下のようなフォーマットで、 「--」で区切られたまとまりの行を全て結合して、 各行の後ろに付け加えたいのですが、 a -> abcd b -> abcd c -> abcd d -> abcd -- e -> efgh f -> efgh g -> efgh h -> efgh -- i -> ijkl j -> ijkl k -> ijkl l -> ijkl -- 自分で色々やってみましたが、うまくできません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • このプログラムの復元処理教えでください。助けてくだ

    #include <stdio.h> int main(void) { char a[51]; char b[101]; char c[51]; int i,k; int cnt; printf("文字例-->"); scanf("%s",a); i = 0; k = 0; while(a[i] !='\0') { cnt = 0; b[k] = a[i]; while(b[k] = a[i]) { cnt++; i++; } k++; b[k] = cnt + 48; k++; } b[k]='\0'; printf("b=%s\n",b); printf("c=%s\n",c); //-------------------------------------------------- getchar(); return 0; }

  • 移項するということ

    こんばんは! A = B + C という式についてBを左辺に移項させると A -B = C になります。 私は学校で「移項させるときは正負を反転させて動かす」と習いました。 これは、あたかも右辺にあったBが左辺に移動したように思えます。移項という言葉からも、=をまたいで項が移動したと読み取れます。 しかし、実際には両辺に-Bを加算することによって、新たに左辺に-Bが現れただけです。 つまり何が言いたいかというと、左辺(右辺)にあるものは右辺(左辺)に移動することは出来ない。 故に、移項という表現は誤っているのではないかという質問です。

  • 「確かめよ」ってどういうこと??

    高1の数学Iの教科書に √a÷√b=√b分のa k>0のとき、√(k^2a)=k√a の二つの公式が成り立つことを確かめよ。と言う問題があります。 この場合は普通に適当な数を代入して、右辺と左辺が同じ値になることを確かめればいいのですか?それとも何らかの証明でもする必要があるのですか? 私は中学校を卒業したばかりの新高校一年生なので、できれば私にでも分かるような方法で説明をしてください。よろしくお願いします。