opensslコマンドとmcryptでのdes暗号化の方法

Posted by roadman on Tuesday, October 2, 2012

TOC

  • des3の暗号化・復号化ロジックをCで書く必要があって書いたのだけれど、結果のチェックがしたかったのでopensslコマンドとかmcryptコマンドとかで同じ値を暗号化してみました。

opensslコマンドの場合

  • 暗号化ロジックはdes3(tripledes)のcfb。今回は2keyモードなので「des-ede-cfb」。
    • 3keyモードの場合は「des3-ede-cfb」らしい。
  • そのまま出すとバイナリ出力されてしまうので、-base64つけてbase64エンコードする。key(-K)とiv(-iv)は適当です。

    $ echo -n "100" | openssl enc -e -des-ede-cfb -K 20202020202020202020202020202020 -iv 2020202020202020 -p -base64 -nosalt -nopad
    key=20202020202020202020202020202020
    iv =2020202020202020
    KZnl
    

mcryptの場合(php使用)

  • mcryptコマンドでも同じようにやろうと思ったら、なんかman見てもivの指定方法がよく分からなかったので、手を抜いてphpのmcrypt関数でやった。
  • libmcrypt使ってるからphp-mcryptでもmcryptコマンドと結果は同じはずだ。

    $ php -r "echo base64_encode(mcrypt_encrypt(MCRYPT_3DES,hex2bin('20202020202020202020202020202020'), '100', MCRYPT_MODE_CFB,hex2bin('2020202020202020')));"
    /hvr
    $ php -v
    PHP 5.4.7 (cli) (built: Oct 1 2012 15:23:25) 
    Copyright © 1997–2012 The PHP Group
    Zend Engine v2.4.0, Copyright © 1998–2012 Zend Technologies
    
  • 結果がopensslと一致しないのはなんでだろう。padingの関係とかか?でも最初のほうから違うし。

  • phpは5.4。hex2binは5.4かららしいので5.4入れないと使えない。