[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>

 ささだです.

16 messages 2007/11/17
[#44241] Re: Float を利用するRubyプログラム — SASADA Koichi <ko1@...> 2007/11/19

 ささだです.

[ruby-list:44255] Re: Rubyで3DESを使用する際に鍵を複数指定する方法

From: 松風 敬 <shohu@...>
Date: 2007-11-20 16:12:25 UTC
List: ruby-list #44255
いちのみや様

はじめまして、松風です。

ありがとうございます!!!!!!!!!
なかば返答をあきらめていたところです。

ソースまでつけてくださるとは。。。
しかも証明までしてくださって。本当に痛み入ります。

こちらのローカル環境でも問題なく動作することが確認できました。

いや、ほんと助かりました。
これでお客さんへの説明と、技術的な対応も無事できそうです。

ありがとうございました!


>いちのみやと申します。
>はじめまして。
>
>07/11/20 に 松風 敬<shohu@cablenet.ne.jp> さんは書きました:
>> 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 <ry.ichi@gmail.com>
>
>
>
>
>
>-- 
>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

In This Thread