丈宛

違潟障

class OpenSSL::Cipher (Ruby 2.3.0)
https://docs.ruby-lang.org/ja/latest/class/OpenSSL=3a=3aCipher.html

| 以下の手順で利用します。
|
|  OpenSSL::Cipher.new や OpenSSL::Cipher::AES256.new などで暗号オブジェクトを生成する
|  OpenSSL::Cipher#encrypt, OpenSSL::Cipher#decrypt で 暗号、復号のいずれをするかを設定する
|  OpenSSL::Cipher#key=, OpenSSL::Cipher#iv=, OpenSSL::Cipher#random_key, OpenSSL::Cipher#random_iv などで 鍵と IV(initialization vector) を設定する
|  OpenSSL::Cipher#update, OpenSSL::Cipher#final で 暗号化/復号化をする

上記説明に則って考えるならば以下のようなコードで暗号化・復号化することができそうです。

```
require 'openssl'

cipher = OpenSSL::Cipher::BF.new

text = 'BF で暗号化・復号化をしてみたいんだゾ'

# 暗号化
cipher.encrypt

key = cipher.random_key
iv  = cipher.random_iv

encrypted_text = cipher.update(text) + cipher.final

# 復号化
cipher.decrypt

cipher.key = key
cipher.iv  = iv

puts cipher.update(encrypted_text) + cipher.final
```

私がさくっと作成した上記の例では `key` と `iv` はランダムに生成したものを設定していますが、松永さんの手元にあるであろう C 言語で記述されたソースコードではしかるべき `key` と `iv` の値がどこかでそれぞれ設定されているのでは、と個人的には推測しています。

何かの参考になれば幸いです。


― Shotaro Chiba <schiba / scminfo.net>

> On 2016/10/12, at 14:30, 松永 肇一 <ma2 / lifemedia.co.jp> wrote:
> 
> 松永と申します。
> 
> cで記述されたBlowfishを使った暗号化関数をrubyで書き直しています。
> このときの鍵の扱いについて質問です。
> 
> OpenSSL::Cipherのリファレンスを見るとkey=メソッドに『なお、ここでいう「暗号鍵」は各暗号アルゴリズムに渡される鍵であって、 「パスワード」ではありません。』という記述があります。
> 
> cのソースコードを見るとBF_set_keyを使ってパスフレーズを変換して、BF_KEYという構造体に格納しているようです。
> 
> key=メソッドが期待するのはパスフレーズではなく、それを変換した後の暗号鍵だと思うのですが、それをrubyで実装する方法が分かりません。参考になるサイト等ご存じの方はいらっしゃいませんでしょうか。
> 
> 
> -- 
> 松永肇一
>