こんにちは。川口と申します。

> RubyでOpenSSLを使うときに、HEX-ASCII形式で表現したデータの文字列を
> 数値データとしてOpenSSLのAPIに渡してあげるにはどのような記述をしたらいいのでしょうか?
>

こう書きます。
c1.key = ["0000000000000000"].pack("H*")

平文もバイナリなので同様に。

あとコマンドラインで設定していた iv の設定を忘れています。


>> plain2.to_a.pack('H*').unpack('C*').each{|c|
>> 	printf("%02x ", c)
>> }

これもちょっと変じゃないですか?

plain2.each_byte {|c|

でよいと思います。


>> ちょっと書き直してみました。
>> 
>> require 'openssl'
>> #include OpenSSL::Cipher
>> 
>> # Sigle DES ECB
>> c1 = OpenSSL::Cipher::Cipher.new("des-ecb")
>> plain1 = "0000000000000000"
>> c1.key = "0000000000000000"
>> 
>> cipher = c1.encrypt.update(plain1) + c1.final
>> 
>> c2 = OpenSSL::Cipher::Cipher.new("DES-ECB")
>> c2.key = "0000000000000000"
>> plain2 = c2.decrypt.update(cipher) + c2.final
>> 
>> 
>> printf("plain1:")
>> plain1.to_a.pack('H*').unpack('C*').each{|c|
>> 	printf("%02x ", c)
>> }
>> printf("\ncipher:")
>> cipher.to_a.pack('H*').unpack('C*').each{|c|
>> 	printf("%02x ", c)
>> }
>> printf("\nplain2:")
>> plain2.to_a.pack('H*').unpack('C*').each{|c|
>> 	printf("%02x ", c)
>> }
>> 
>> p(plain1 == plain2)  #=> true
>> 
>> ただ、特に結果に影響はありませんでした。
>> 
>> そもそもなにで引っかかってるのかを整理しますと、
>> 私の場合、Cでちょっとしたコンソールアプリを作りことが多いのですが、
>> OpenSSLのAPIを呼び出すときは、コンソールからデータをHEX-ASCII形式の文字列で入力し、
>> それを数値に変換してAPIを呼び出すようなことをしていました。
>> 
>> RubyでOpenSSLを使うときに、HEX-ASCII形式で表現したデータの文字列を
>> 数値データとしてOpenSSLのAPIに渡してあげるにはどのような記述をしたらいいのでしょうか?
>> 
>> 
>> 
>> 

----
Macoto Kawaguchi  macoto / kawaguchi-fusuma.com