2017年10月31日 星期二

[php] php 怎麼使用 RSA 非對稱式加密



首先,要先產生 RSA 公私鑰,我們使用公鑰放在client 端,然後,在server 端使用 private key 來解密。

先產生私鑰
  openssl genrsa -out private_pg_report.key 1024
再用私鑰生成公鑰
  openssl rsa -in private_pg_report.key -out public_pg_report.pem -outform PEM -pubout

放置下面兩個路徑 REPORT_PUBLIC_KEY_PATH , REPORT_PRIVATE_KEY_PATH
這邊要注意的是,RSA 只能加密117 位,所以 使用str_split 去分隔成chunk ,分段加密,最後再使用 base64_encode 成 string 。
解密是反過來的過程,加密後的長度就是固定128。所以使用 128 去做str_split 。


    public function encrypt($plain)
    {
        $fp = fopen(REPORT_PUBLIC_KEY_PATH, "r");
        $pubKey = fread($fp, 8192);
        fclose($fp);
        $pubKeyRes = openssl_get_publickey($pubKey);
        if (!$pubKeyRes) {
            throw new Exception('Public Key invalid');
        }
        $finalCrypt = '';
        foreach (str_split($plain, 117) as $chunk) {
            if (openssl_public_encrypt($chunk, $crypt, $pubKeyRes)) {
                $finalCrypt .= $crypt;
            }
        }
        openssl_free_key($pubKeyRes);
        return base64_encode($finalCrypt);
    }

    public function decrypt($encrypted)
    {
        $fp = fopen(REPORT_PRIVATE_KEY_PATH, "r");
        $privateKey = fread($fp, 8192);
        fclose($fp);
        $privateKeyRes = openssl_get_privatekey($privateKey);
        if (!$privateKeyRes) {
            throw new Exception('Private Key invalid');
        }
        $finalDecrypted = '';
        foreach (str_split(base64_decode($encrypted), 128) as $chunk) {
            openssl_private_decrypt($chunk, $decrypted, $privateKeyRes);
            $finalDecrypted .= $decrypted;
        }
        openssl_free_key($privateKeyRes);
        return $finalDecrypted;
    }

PHP 使用 RSA 公钥对 JSON 对象进行加密,加密不了? - V2EX
https://www.v2ex.com/t/327672
PHP加密的几种方式 - 简书
http://www.jianshu.com/p/5f42699d8af5


[logstash] logstash 怎麼取得 nested 的 json 內的值


怎麼取得 json 的 值呢?

filter {
    if [type] == "my_report_text" {
        json {
            source => "message"
        }
        date {
            match => ["server_timestamp", "UNIX"]
            remove_field => ["server_timestamp"]
        }

        mutate {
             remove_field => ["message","source","input_type","offset","count","fields"]
             add_field => {
                 "gid" => "%{[text_v1][id]}"
                 }
        }
        if ![text_v1][id] {
            drop {}
        }

    }

其實,只要使用 "%{[text_v1][id]}" 方式就可以了。
範例中的 message 內是 json string  下列有兩筆範例參考。


{"@timestamp":"2017-10-31T12:21:23.896Z","beat":{"hostname":"pccm","name":"pccm","version":"5.5.1"},"input_type":"log","message":"{\"server_ip\":\"172.19.0.5\",\"server_timestamp\":1509450155,\"uid\":813837017074237440,\"pid\":0,\"text_v1\":{\"feature\":1,\"content\":\"Cool\",\"platform\":0,\"country\":\"us\",\"app_version\":\"6.30\"}}","offset":630,"source":"/data/log/report_text.log","type":"my_report_text"}

{"@timestamp":"2017-10-31T12:21:23.896Z","beat":{"hostname":"pccm","name":"pccm","version":"5.5.1"},"input_type":"log","message":"{\"server_ip\":\"172.19.0.5\",\"server_timestamp\":1509450155,\"uid\":813837017074237440,\"pid\":0,\"text_v1\":{\"id\":\"AMX76rwXQ36inHnbYZL8BA\",\"feature\":1,\"content\":\"Cool\",\"platform\":0,\"country\":\"us\",\"app_version\":\"6.30\"}}","offset":630,"source":"/data/log/report_text.log","type":"my_report_text"}

[elasticsearch][logstash] logstash 中 使用某欄位當作 elasticsearch 的 _id


一般的 elasticsearch ouput 如下 可以使用 document_id 來指定 event 的 _id

output { elasticsearch { index => "test1" document_type => "message_logs" document_id => "%{type}-%{id}" action => index hosts => "myhost" }}

一個更完整的例子如下 使用 mutate 從json裏面取值,增加一個 gid 的欄位。如果,當json 沒有id這個欄位,就捨去這筆 event 。
input { #beats { # port => 5044 #} stdin { codec => json_lines } } filter { if [type] == "my_report_text" { json { source => "message" } date { match => ["server_timestamp", "UNIX"] remove_field => ["server_timestamp"] } mutate { remove_field => ["message","source","input_type","offset","count","fields"] add_field => { "gid" => "%{[text_v1][id]}" } } if ![text_v1][id] { drop {} } } } output { if [type] == "my_report_text" { elasticsearch { hosts => ["127.0.0.1","10.2.101.163","10.2.101.164"] index => "report_text-%{+YYYY.MM.dd}" workers => 5 document_id => "%{gid}" } } }

2017年10月20日 星期五

[php] php get remote url file size 取得遠端檔案大小

[php] php get remote url file size 取得遠端檔案大小
可以使用 get_headers 來查看 url 的 file size
$head = array_change_key_case(get_headers("http://example.com/file.ext", TRUE));
$filesize = $head['content-length'];
array_change_key_casearray_change_key_case — Changes the case of all keys in an array是把array內的key都轉成同樣大小寫,預設是小寫。

PHP: array_change_key_case - Manualhttp://php.net/manual/en/function.array-change-key-case.phphttp - Easiest way to grab filesize of remote file in PHP? - Stack Overflow https://stackoverflow.com/questions/1401131/easiest-way-to-grab-filesize-of-remote-file-in-php

[tech][jquery] AJAX 在 error 時顯示錯誤訊息



AJAX 在 error 時顯示錯誤訊息
在 AJAX error 時,跳出 alert


$.post("test.php", function(data) {
   alert("Data Loaded: " + data);
})
.error(function() { 
   alert("error"); 
})
如何秀出 error message


error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}
合併起來的例子


$.post("test.php", function(data) {
   alert("Data Loaded: " + data);
}).error: function(xhr, status, error) {
  var err = eval("(" + xhr.responseText + ")");
  alert(err.Message);
}


php - How to get the jQuery $.ajax error response text? - Stack Overflowhttps://stackoverflow.com/questions/1637019/how-to-get-the-jquery-ajax-error-response-textjavascript - jQuery.post() failure callback function? - Stack Overflow https://stackoverflow.com/questions/6046898/jquery-post-failure-callback-function

2017年10月16日 星期一

[武術] 楊太極武藝 蘇清標


再次看了這幾部 楊太極武藝 蘇清標  老師的影片,真的暢快。

養生功操---蘇清標老師演示(HD) - YouTube https://www.youtube.com/watch?v=Gl3WnV65ueY&t=134s
蘇清標楊家老架緊湊套拳+推手表演20140608 - YouTube https://www.youtube.com/watch?v=cORKE2HivB0
蘇清標老師太極拳與推手 - YouTube https://www.youtube.com/watch?v=xSZtZooXCDE

生活與想法


發現已經一段時間,沒有在清醒的時候好好記錄自己的想法了。
忙碌是一個原因,不管是心理,或者是生理上的忙碌,很多事情的都一轉瞬的過了。
有時,是累到,闔著眼睛就睡著了。

  • 17.09.09(六) ~ 17.09.10(日) 去了趟新竹
    火車直接到新竹後 安頓,宵夜--> 享初食堂
    Sat
    -  新竹都城隍廟 周遭
    -  竹塹城迎曦門
    - option  元祖郭家潤餅 阿城號米粉(米粉貢丸湯) 林家肉圓(紅糟肉圓)  廟口鴨香飯

    -  清大 交大
    -  (中午)車庫餐廳
    - 竹科附近
    - 南寮漁港
    - 福源花生醬
  • 17.09.16(六) ~ 17.09.20(三) 到日本進行一趟關西行
  • 17.09.23 (六) ~ 17.09.24 (日) 去了趟日月潭
  • 17.10.07 (六) ~ 17.10.10 (二) 的 國慶日連假
    • 17.10.07 (六)烤肉
    • 17.10.09 (一) 古坑 雲頂喝咖啡
    • 17.10.10 (二) 彰化 拜訪姑姑 逢甲夜市參觀表弟的滷味店

除了生活瑣事,也處理了 project 上的問題。
無奈,可能要繼續調整策略。