[#44189] [ANN] Rails勉強会@東京 第24回のお知らせ — "MOROHASHI Kyosuke" <moronatural@...>
各位
1 message
2007/11/08
[#44190] Ruby/KAKASIのインストールに失敗する — <boku.charhan@...>
お忙しいところ失礼します、WINDOWS XPを使っているんですが
8 messages
2007/11/08
[#44197] Re: Ruby/KAKASIのインストールに失敗する
— Nobuyoshi Nakada <nobu@...>
2007/11/09
なかだです。
[#44192] [ANN]Ruby勉強会@新潟 第1回のお知らせ — "Masatoshi Itagaki" <masatoshi@...>
各地でRuby勉強会が開催されるようになっていますが、新潟でも開催しようと
6 messages
2007/11/08
[#44207] REXML で UTF16 のファイルが読み込めない — <rook401@...>
REXML で UTF16 のファイルを読み込もうとするとエラーになります。
5 messages
2007/11/12
[#44208] はじめまして — "Ohto, Yasunori" <Yasunori.Ohto@...>
はじめまして
8 messages
2007/11/12
[#44224] WinXPでのCursesプログラム — "Masao Ochi" <ochi@...>
初めて投稿させていただきます。越智と申します。
5 messages
2007/11/15
[#44237] Float を利用するRubyプログラム — SASADA Koichi <ko1@...>
ささだです.
16 messages
2007/11/17
[#44241] Re: Float を利用するRubyプログラム
— SASADA Koichi <ko1@...>
2007/11/19
ささだです.
[#44245] Re: Float を利用する Ruby プログラム
— NISHIMATSU Takeshi <t_nissie@...>
2007/11/19
西松と申します。
[#44246] 数学関数が足りない (Re: Re: Float を利用する Ruby プログラム)
— Nobuyoshi Nakada <nobu@...>
2007/11/19
なかだです。
[#44250] Re: 数学関数が足りない (Re: Re: Float を利用する Ruby プログラム)
— NISHIMATSU Takeshi <t_nissie@...>
2007/11/19
西松です。
[#44268] Complex#cproj patch for ruby-1.9/lib/complex.rb
— NISHIMATSU Takeshi <t_nissie@...>
2007/11/21
西松と申します。
[#44263] RUBY FORUM 2008のお知らせ — "TAISEI OKAZAKI" <okazaki@...>
度々のお知らせ失礼いたします。
4 messages
2007/11/21
[#44286] TmailをgemでWindowsにインストールしようとするとエラーになる — "garyo hosu" <garyohosu@...>
いつもお世話になっております。garyoです。
7 messages
2007/11/30
[#44287] Re: TmailをgemでWindowsにインストールしようとするとエラーになる
— rubikitch@...
2007/11/30
From: "garyo hosu" <garyohosu@gmail.com>
[ruby-list:44254] Re: Rubyで3DESを使用する際に鍵を複数指定する方法
From:
ry.ichi <ry.ichi@...>
Date:
2007-11-20 15:53:39 UTC
List:
ruby-list #44254
いちのみやと申します。
はじめまして。
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>