2013年5月5日日曜日

[pChart]軸の調整

pChart::drawScale() のパラメータにより軸の調整を行う。
void pChart::drawScale($Data, $DataDescription, $ScaleMode, $R, $G, $B, $DrawTicks=TRUE, $Angle=0, $Decimals=1, $WithMargin=FALSE, $SkipLabels=1, $RightScale=FALSE);
Table: drawScale
Parameter説明
$Dataプロットするデータ
$DataDescriptionプロットするデータの DataDescription
$ScaleMode下表参照
$R色 (R)
$G色 (G)
$B色 (B)
$DrawTicksFALSE にすることでラベルが表示されなくなる (下図参照)
$Angleラベルの角度
$Decimals数値桁数
$WithMarginFALSE の場合グラフの表示幅が描画領域いっぱいで使用される (下図参照)
$SkipLabelsX 軸のラベルのスキップ数 (下図参照)
$RightScale
Table: ScaleMode の値
Parameter意味
SCALE_NORMALプロット値の最大・最小値まで表示
SCALE_START0最小値が 0 に設定される
SCALE_ADDALLすべてのプロット値の累積で最大・最小が決まる
SCALE_ADDALLSTART0上項目と同様だが最小値が 0 に設定される
  • SCALE_NOMAL の場合
    $chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE);
  • SCALE_START0 の場合
    $chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_START0,150,150,150,TRUE,0,2,TRUE);
  • $DrawTicks=FALSE の場合
    $chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_START0,150,150,150,FALSE,0,2,TRUE);
  • $WidthMargin=FALSE の場合
    $chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_START0,150,150,150,TRUE,0,2,FALSE);
  • $SkipLabel=2 の場合
    $chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_START0,150,150,150,TRUE,0,2,TRUE, 2);

[pChart]インストール

JpGraph はライセンスが QPL であり、pChart はライセンスが GPL である。
  1. pChart | a PHP Charting library から pChart をダウンロードする。
  2. ダウンロードしたファイルを展開して php/PEAR 以下に pChart ディレクトリを作成し配置する。
  3. pChart ディレクトリ内に必要なファイルがあるので php/PEAR/pChart 直下に配置しなおす。


動作確認
<?php
include("pChart/pData.class");
include("pChart/pChart.class");

$font_path = "c:\Windows\Fonts\sazanami-gothic.ttf";

/* data に plot するデータ情報を入れる */
$data = new pData;
$data->AddPoint(array(1, 4, -3, 5, 10, -2, -8, 2), "serie1");
$data->AddAllSeries();
$data->SetAbsciseLabelSerie();
$data->SetSerieName("test1", "serie1");

/* chart にグラフを描く領域の情報を入れる */
$chart = new pChart(700, 230);
$chart->setFontProperties($font_path,8);
$chart->setGraphArea(50, 30, 680, 200);
$chart->drawScale($data->GetData(),$data->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2,TRUE);

/* chart に data を配置しグラフを描く */
/* 棒グラフの場合は drawBarGraph */
$chart->drawBarGraph($data->GetData(), $data->GetDataDescription(), TRUE);
/* 線グラフの場合は drawLineGraph */
//$chart->drawLineGraph($data->GetData(),$data->GetDataDescription());
/* plot の場合は drawPlotGraph */
//$chart->drawPlotGraph($data->GetData(),$data->GetDataDescription(),3,2,255,255,255);

/* 画像として出力する */
$chart->Stroke();
?>

[JavaScript]CSV to Table

cvs2table
Index of /lib/jquery/plugin/csv2table
上記サイトから csv2table-0.02-b-4.1.zip をダウンロードする
<html>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
 <script src="./js/jquery.csv2table-0.02-b-4.1.js" type="text/javascript" charset="utf-8"></script>
  <body>
    csv2table<br/>
    <div id="view0"></div>
    <script type="text/javascript">
      $(function() {
        $('#view0').csv2table('./data.csv');
      });
    </script>
    <hr/>
    csv2table (sortable: false)<br/>
    <div id="view1"></div>
    <script type="text/javascript">
      $(function() {
        $('#view1').csv2table('./data.csv',
          {
            sortable: false,
          });
      });
    </script>
    <hr/>
    csv2table (onload: tr:even)<br/>
    <div id="view2"></div>
    <script type="text/javascript">
      $(function() {
        $('#view2').csv2table('./data.csv',
          {
            onload: function(id, op, data, ary) {
              $('tr:even', '#' + id).css('background', '#eee')
            },
          });
      });
    </script>
  </body>
</html>
sample (fc2 に置いてあるテストページに飛びます)

csvtotable
jquerycsvtotable
上記サイトから jquerycsvtotable.zip をダウンロードする
<html>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
 <link rel="stylesheet" href="css/csvtable.css" type="text/css">
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
 <script type="text/javascript" src="js/jquery.csvToTable.js"></script>
  <body>
    csvtotable<br/>
    <div id="view1"></div>
    <script type="text/javascript">
      $(function() {
        $('#view1').CSVToTable('./data.csv');
      });
    </script>
    <hr/>
    csvtoable (loadingImage)<br/>
    <div id="view2"></div>
    <script type="text/javascript">
      $(function() {
        $('#view2').CSVToTable('./data.csv',
          {
            loadingImage: 'img/loading.gif',
          });
      });
    </script>
  </body>
</html>
sample (fc2 においてあるテストページに飛びます)

2013年5月4日土曜日

[OpenSSL]AES コマンド

AES 256 CBC モードで暗号化する手順
$ openssl enc -aes-256-cbc -e -in null.dat -out enc_aes256cbc.dat -p -nosalt
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB9618A9336087C322
iv =AD804FC4942C79B8E7A3F5C26B1E599E


復号化する手順
$ openssl enc -aes-256-cbc -d -in enc_aes256cbc.dat -out dec_aes256cbc.dat -p -nosalt
enter aes-256-cbc decryption password:
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB9618A9336087C322
iv =AD804FC4942C79B8E7A3F5C26B1E599E

br/ Key と IV を生成する方法
passphase = "hoge" から Key と IV を生成する。 passphase から MD5 値をとる。
00 | 68 6F 67 65
-- (MD5) -->
00 | EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
MD5 を 1 回行った結果に hoge を追加して再び MD5 値をとる。
00 | EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
10 | 68 6F 67 65
-- (MD5) -->
00 | 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
その結果に hoge を追加して再び MD5 値をとる。
00 | 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
10 | 68 6F 67 65
-- (MD5) -->
00 | AD 80 4F C4 94 2C 79 B8 E7 A3 F5 C2 6B 1E 59 9E
以上から 3 つの MD5 値が得られる。
MD5 1回目 EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
MD5 2回目 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
MD5 3回目 AD 80 4F C4 94 2C 79 B8 E7 A3 F5 C2 6B 1E 59 9E
1 回目 MD5 値と 2 回目 MD5 値を連結した値が Key となり、3 回目 MD5 値が IV となる。
Key = EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
IV = AD 80 4F C4 94 2C 79 B8 E7 A3 F5 C2 6B 1E 59 9E


OpenSSL コマンドで passphase に hoge を指定した時の Key と IV
$ openssl enc -aes-256-cbc -e -in null.dat -out enc_aes256cbc.dat -p -pass pass:hoge -nosalt
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB9618A9336087C322
iv =AD804FC4942C79B8E7A3F5C26B1E599E

[OpenSSL]AES 暗号モード

AES には以下の 4 モードがある。
  • ECB (Electronic Code Block)
  • CBC (Cipher Block Chaining)
  • OFB (Output FeedBack)
  • CFB (Cipher FeedBack)
また鍵長 (Bit 数) が 3 種選べる。
  • 128bit
  • 192bit
  • 256bit
以上から AES のモードには以下のパターンが存在する (表中の文字列は OpenSSL コマンドでAES 暗号を行う場合の引数)
Table: AES モードの組み合わせ
ECBCBCOFBCBB
128bitaes-128-ecbaes-128-cbcaes-128-ofbaes-128-cfb
192bitaes-192-ecbaes-192-cbcaes-192-ofbaes-192-cfb
256bitaes-256-ecbaes-256-cbcaes-256-ofbaes-256-cfb

[OpenSSL]Triple DES

Triple DES EDE CBC モードで暗号化の手順
$ openssl enc -des-ede3-cbc -e -in null.dat -out enc_des_e
de3_cbc.dat -p -nosalt
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB
iv =9618A9336087C322


復号化の手順
$ openssl enc -des-ede3-cbc -d -in enc_des_ede3_cbc.dat -o
ut dec_des_ede3_cbc.dat -p -nosalt
enter des-ede3-cbc decryption password:
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB
iv =9618A9336087C322


Key, IV の生成方法
passphase = "hoge" から Key と IV を生成する。 passphase から MD5 値をとる。
00 | 68 6F 67 65
-- (MD5) -->
00 | EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
MD5 を 1 回行った結果に hoge を追加して再び MD5 値をとる。
00 | EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
10 | 68 6F 67 65
-- (MD5) -->
00 | 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
以上から 2 つの MD5 値が得られる。
1 回目 MD5 値 EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E
2 回目 MD5 値 63 41 3A FC BF 32 1F FB 96 18 A9 33 60 87 C3 22
Key は 1 回目 MD5 値に 2 回目 MD5 値の上位 8 バイトをくっつけた値になる。
IV は 2 回目 MD5 値の下位 8 バイトとなる。
Key = EA 70 3E 7A A1 EF DA 00 64 EA A5 07 D9 E8 AB 7E 63 41 3A FC BF 32 1F FB
IV = 96 18 A9 33 60 87 C3 22
passphase に hoge を指定して Triple DES EDE CBC モードを行った結果
$ openssl enc -des-ede3-cbc -e -in null.dat -out enc_des_ede3_cbc.dat -p -nosalt -pass pass:hoge
key=EA703E7AA1EFDA0064EAA507D9E8AB7E63413AFCBF321FFB
iv =9618A9336087C322

[OpenSSL]DES コマンド

暗号化手順
$ openssl des -e -in test.txt -out test_enc_des.txt
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:
Key と IV を指定する場合
$ openssl enc -des-ecb -e -in null.dat -out null_enc_des.dat -iv 00000000 -K 00000000
Key と IVを表示する
$ openssl des -e -in test.txt -out test.enc -p -nosalt
enter des-cbc encryption password:
Verifying - enter des-cbc encryption password:
key=EA703E7AA1EFDA00
iv =64EAA507D9E8AB7E
Keyを作成するための方法を指示する
$ openssl enc -des-ecb -e -in test.txt -out test.enc -iv 0000000000000000 -p -nosalt -md md5
enter des-ecb encryption password:
Verifying - enter des-ecb encryption password:
key=EA703E7AA1EFDA00
iv =0000000000000000


復号化手順
$ openssl des -d -in test_enc_des.txt -out test_dec_des.txt
enter des-cbc decryption password:
Key と IV (Initial Vector) を指定する場合
$ openssl enc -des-ecb -d -in null_enc_des.dat -out null_dec_des.dat -iv 00000000 -K 00000000


Key, IV の作り方
$ openssl enc -des-ecb -e -in test.txt -out test.enc -p -nosalt
enter des-ecb encryption password:
Verifying - enter des-ecb encryption password:
key=EA703E7AA1EFDA00
iv =64EAA507D9E8AB7E
password を hoge にすると key, iv は以下のようになる
key=EA703E7AA1EFDA00
iv =64EAA507D9E8AB7E
hoge と書いたテキストファイル hoge.txt (末尾に改行なしで保存) を準備して MD5 ダイジェスト値を取ると以下のようになる。
$ openssl dgst -md5 hoge.txt
MD5(hoge.txt)= ea703e7aa1efda0064eaa507d9e8ab7e
MD5 ダイジェスト値の前半が key に該当し、後半が iv に該当する。すなわち
passphase = hoge
hoge -- (MD5) --> ea703e7aa1efda0064eaa507d9e8ab7e
上位8byte = ea703e7aa1efda00 = key
下位8byte = 64eaa507d9e8ab7e = iv