LoginSignup
1
0

More than 5 years have passed since last update.

CentOS6で、blencを使ってみた。

Posted at

blencを使って、phpのソースコードを暗号化するテスト。

必要なパッケージをインストール


yum -y install php php-devel php-pear gcc-c++

blencはyumだと見当たらないので、peclでインストールする。


pecl install blenc channel://pecl.php.net/blenc-1.1.4b

実行時、Enable BLENC? [autodetect] :と聞かれるので、そのままエンターキーを押す。

インストールが終わったら、以下の表示が出ているはず。


Build process completed successfully
Installing '/usr/lib64/php/modules/blenc.so'
install ok: channel://pecl.php.net/blenc-1.1.4b
configuration option "php_ini" is not set to php.ini location
You should add "extension=blenc.so" to php.ini

php.iniに、extension=blenc.soを足せ、ということで、
php.iniに直接ではなく、php.d/blenc.iniを作って、そこに書き込む。
また、後述する配布用の鍵のパスを指定する。
配布用の鍵のパスは、デフォルトだと/usr/local/etc/blenckeysになっている。


echo "extension=blenc.so" > /etc/php.d/blenc.ini
echo "blenc.key_file=/root/blenckey" >> /etc/php.d/blenc.ini

暗号化したいphpファイルを用意。
以下テストとして作成。

input.php
<?php
echo "Hello world.\n";
?>

blencを使って、暗号化するためのphpファイルを作成

blenc.php
<?php
    // 第1引数 暗号化したいphpファイル
    // 第2引数 暗号化したphpファイルの保存先
    // 第3引数 配布用の鍵の保存先

    $input_file = $argv[1];
    $output_file = $argv[2];
    $key_file = $argv[3];

    // 鍵。任意の文字列。念のためmd5している。
    $private_key = md5('my_key_phrase');

    // file_get_contents関数を使って暗号化したいphpファイルを読み込む。
    $source = file_get_contents($input_file);

    // 読み込んだphpファイルに含まれる、都合の悪い文字列を削除しておく・・・。
    // たぶんblencのバグだけど、これをしないと、暗号化したphpファイルを実行したとき、
    // エラーになって動かない。
    $contents = preg_replace(array('/^<(\?|\%)\=?(php)?/', '/(\%|\?)>$/'), array('',''), $source);

    // 暗号化処理。成功すると、暗号化したファイルが指定したパスに作成される。
    // また、戻り値として、配布用の鍵の中身が得られる。
    $public_key = blenc_encrypt($contents, $output_file, $private_key);

    // 配布用の鍵の中身を、指定したパスに出力しておく。
    file_put_contents($key_file, $public_key . PHP_EOL);
?>

以下一連の作業

[root@localhost ~]# uname -a
Linux localhost.localdomain 2.6.32-642.11.1.el6.x86_64 #1 SMP Fri Nov 18 19:25:05 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#
[root@localhost ~]# /usr/bin/php --version
PHP 5.3.3 (cli) (built: Aug 11 2016 20:33:53)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
[root@localhost ~]#
[root@localhost ~]# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
blenc   1.1.4b  beta
[root@localhost ~]#
[root@localhost ~]# cat /etc/php.d/blenc.ini
extension=blenc.so
blenc.key_file=/root/blenckey
[root@localhost ~]#
[root@localhost ~]# cat input.php
<?php
echo "Hello world.\n";
?>
[root@localhost ~]# cat blenc.php
<?php
    // 第1引数 暗号化したいphpファイル
    // 第2引数 暗号化したphpファイルの保存先
    // 第3引数 配布用の鍵の保存先

    $input_file = $argv[1];
    $output_file = $argv[2];
    $key_file = $argv[3];

    // 鍵。任意の文字列。念のためmd5している。
    $private_key = md5('my_key_phrase');

    // file_get_contents関数を使って暗号化したいphpファイルを読み込む。
    $source = file_get_contents($input_file);

    // 読み込んだphpファイルに含まれる、都合の悪い文字列を削除しておく・・・。
    // たぶんblencのバグだけど、これをしないと、暗号化したphpファイルを実行したとき、
    // エラーになって動かない。
    $contents = preg_replace(array('/^<(\?|\%)\=?(php)?/', '/(\%|\?)>$/'), array('',''), $source);

    // 暗号化処理。成功すると、暗号化したファイルが指定したパスに作成される。
    // また、戻り値として、配布用の鍵の中身が得られる。
    $public_key = blenc_encrypt($contents, $output_file, $private_key);

    // 配布用の鍵の中身を、指定したパスに出力しておく。
    file_put_contents($key_file, $public_key . PHP_EOL);
?>
[root@localhost ~]#
[root@localhost ~]# /usr/bin/php blenc.php input.php output.php blenckey
[root@localhost ~]#
[root@localhost ~]# ll input.php output.php blenckey
-rw-r--r-- 1 root root  45 12月  1 11:08 2016 blenckey
-rw-r--r-- 1 root root  32 12月  1 10:46 2016 input.php
-rw-r--r-- 1 root root 104 12月  1 11:08 2016 output.php
[root@localhost ~]#
[root@localhost ~]# vi output.php
[root@localhost ~]#
BLENC^@^@^@1.1.4b^@^@^@^@^@^@^@^@^@^@bf7264349ce07405f2e687cf5d188682^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@OA^S^Vo^TI^PcCZX<96><9f>ejD±X      ±{!cO$e2<89><99>,}
~
~
~
~
[root@localhost ~]#
[root@localhost ~]# cat blenckey
/coNbBdL3kaDFcyIMetvgSKXtGKGaBf2Cc4XPW30gPI=
[root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# /usr/bin/php output.php
Hello world.
[root@localhost ~]#
[root@localhost ~]#
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0