はじめまして、山本と申します。

OpenSSL::Cipherクラスをつかって、DESのプログラムを作成しております。

opensslコマンドを使って、下記のような実行をすると、
$ openssl enc -des-ecb -in plaintext.bin -out ciphertext.bin -K
0000000000000000 -iv 0000000000000000 -e
8C A6 4D E9 C1 B1 23 A7 という最初のブロックが得られます。
(plaintext.binは 00 00 00 00 00 00 00 00hのバイナリデータです。)

これと同じ処理をRubyで記述しました。

require 'openssl'
include OpenSSL::Cipher

# Sigle DES ECB
c1 = Cipher.new("DES-ECB")
c1.key = "0000000000000000"
plain1 = "0000000000000000"
cipher = c1.encrypt.update(plain1) + c1.final

printf("\ncipher:")
cipher.to_a.pack('H*').unpack('C*').each{ |c|
       printf("%02x ", c)

c2 = Cipher.new("DES-ECB")
c2.key = "0000000000000000"
plain2 = c2.decrypt.update(cipher) + c2.final

p(plain1 == plain2)  #=> true

ですが、同じ暗号文が得られません。
暗号化前の平文と復号化した平文は同じになるため、使い方には問題ないと思っており、
問題は、鍵および平文データの渡し方にあると思っております。

意図としては、鍵や平文を16進表記のバイト列で記述してAPIに渡したいのですが、
OpenSSL::Cipher.encryptメソッドの引数をどのような記述にすれば、意図した形式で
OpenSSLのDLLに渡されるかがいまいち理解できていません。

"0000000000000000".to_a.pack('H*').unpack('C*')

というようなことや、

"\x00\x00\x00\x00\x00\x00\x00\x00"

のような書き方もしてみましたが、opensslコマンドと同じ結果を得ることができないか、Type Errorとなってしまいます。

なにかものすごい基本的なことが分かっていないような気がするのですが、ご教授頂けませんでしょうか?