こんにちは。川口と申します。 > 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