From: "松風 敬" Date: 2007-11-21T01:12:25+09:00 Subject: [ruby-list:44255] Re: Rubyで3DESを使用する際に鍵を複数指定する方法 いちのみや様 はじめまして、松風です。 ありがとうございます!!!!!!!!! なかば返答をあきらめていたところです。 ソースまでつけてくださるとは。。。 しかも証明までしてくださって。本当に痛み入ります。 こちらのローカル環境でも問題なく動作することが確認できました。 いや、ほんと助かりました。 これでお客さんへの説明と、技術的な対応も無事できそうです。 ありがとうございました! >いちのみやと申します。 >はじめまして。 > >07/11/20 に 松風 敬 さんは書きました: >> Rubyで以下のような鍵A,Bを作成して,その鍵を使用して暗号化形式 >> "des-ede"でメッセージを暗号化、その暗号化したものをさらに複合 >> 化したいです。 >> >> 鍵A作成 → 'keymessage1'をMD5でハッシュ化したもの >> 鍵B作成 → 'keymessage2'をMD5でハッシュ化したもの >> >> ※あるメッセージを >> 鍵Aで暗号化 → 鍵Bで複合化 → 鍵Aで暗号化 >> のように暗号化(des-ede)し、これを複合化するコード > >TripleDESは鍵を2個または3個使って >DESの暗号化→復号→暗号化をするものですが、 >鍵を別々に設定するのではなく >2 or 3個の鍵を連結したものを1つの鍵(128bit or 192bit)として >設定するようになっています。 > >なので、鍵Aと鍵Bを連結したものを鍵として設定すれば >ご希望の処理が実現できると思います。 > > >require 'openssl' >require 'md5' >include OpenSSL::Cipher > >key1 = MD5.digest('keymessage1')[0..7] >key2 = MD5.digest('keymessage2')[0..7] >msg = "12345678" > ># ># TripleDES(des-ede)で暗号(key1+key2) ># >c1 = Cipher.new("des-ede") >c1.key = key1 + key2 >c1.padding = 0 >msg1_e = c1.encrypt.update(msg) + c1.final > ># ># DESで暗号(key1)→復号(key2)→暗号(key1) ># >c21 = Cipher.new("des-ecb") >c21.key = key1 >c21.padding = 0 >c22 = Cipher.new("des-ecb") >c22.key = key2 >c22.padding = 0 ># key1で暗号化 >msg2_e = c21.encrypt.update(msg) + c21.final ># key2で復号 >msg2_ed = c22.decrypt.update(msg2_e) + c22.final ># key1で暗号化 >msg2_ede = c21.encrypt.update(msg2_ed) + c21.final > ># 暗号文を比較 >p msg1_e == msg2_ede # => true > ># 暗号文が同じなので当然ですが、どっちでも復号できます ># msg2_edeをc1で復号 >msg1d = c1.decrypt.update(msg2_ede) + c1.final >p msg1d # => "12345678" ># msg1_eをc21, c22で復号(復号(key1)→暗号(key2)→復号(key1)) >msg2d_ed = c21.decrypt.update(msg1_e) + c21.final >msg2d_e = c22.encrypt.update(msg2d_ed) + c22.final >msg2d = c21.decrypt.update(msg2d_e) + c21.final >p msg2d # => "12345678" > > >よく分かってませんがpadding = 0をしないと >key2で復号するところで怒られます。 >"bad decrypt (OpenSSL::CipherError)" >(PKCS?とかの関係らしいですが詳しく調べていません) > > >-- >ICHINOMIYA Ryuji > > > > > >-- >No virus found in this incoming message. >Checked by AVG Free Edition. >Version: 7.5.503 / Virus Database: 269.16.0/1135 - Release Date: 2007/11/16 >22:58