[[PHP]]

#contents

* 2chのトリップとは? [#wbc52d03]
2ch掲示板で使われているハッシュ値の一種。

[[トリップ (電子掲示板) - Wikipedia>http://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%83%83%E3%83%97_%28%E9%9B%BB%E5%AD%90%E6%8E%B2%E7%A4%BA%E6%9D%BF%29]]
>トリップとは、匿名掲示板2ちゃんねるなど電子掲示板の名前の横に表示することのできる文字列である。
トリップは暗号化された文字列であり、使用者のパスワード入力により表示できる。キャップに準ずる機能であり、表示することによって簡易的に個人を証明および識別できる。
名前の由来は『1人用(ひとりよう)キャップ』を略して『トリップ』。
パスワードが同一であれば、誰でも同一のトリップを表示できる。パスワードは、一般的にトリップキーと呼ばれている。

簡易で短いハッシュ値として、トリップを利用したい。

* PHPのトリップ作成法 [#e9ee2bc7]

[PHP] 2chのトリップを計算する
http://pc.casey.jp/archives/2452

#code(php){{
function index(){
    Configure::write('debug', 2);

    // set key
    $key = '#istrip';

    // UTF-8 to SJIS
    $key = mb_convert_encoding($key, "SJIS", "UTF-8");  // to, from

    // exec
    $ret = $this->_makeTrip($key);

    // debug
    debug($ret);
}

/*-----------------------------------------------------
 * make 2ch TRIP ( = DES ) by CASEY.JP 2010 GPL
 *-----------------------------------------------------
 * VERSION:
 *   2010.08.17 0.01 alpha
 * NOTE:
 *   digit  8: -2002.10.03
 *   digit 10: 2002.10.03-
 *   digit 12: 2009.06.19-
 * test data for digit 10:
 *   $key = "#テスト";             // ◆SQ2Wyjdi7M
 *   $key = '#Wikipedia';           // ◆Ig9vRBfuyA
 *   $key = '#istrip';              // ◆/WG5qp963c
 * test data for digit 12:
 *   $key = '#TESTTESTTESTTEST';    // ◆TDxLX5/h3FIK
 *   $key = '#テストテストテスト';   // ◆Iwo2kAiiMPp6
 * SJIS CODE in SCRIPT
 */
function _makeTrip($key){
    // check
    preg_match('|^#(.*)$|', $key, $keys);
    if(empty($keys[1])) return false;
    $key = $keys[1];

    // start
    if(strlen($key) >= 12){
         // digit 12
        $mark = substr($key, 0, 1);
        if($mark == '#' || $mark == '$'){
            if(preg_match('|^#([[:xdigit:]]{16})([./0-9A-Za-z]{0,2})$|', $key, $str)){
                $trip = substr(crypt(pack('H*', $str[1]), "$str[2].."), -10);
            }else{
                // ext
                $trip = '???';
            }
        }else{
            $trip = substr(base64_encode(sha1($key, TRUE)), 0, 12);
            $trip = str_replace('+', '.', $trip);
        }
    }else{
        // digit 10
        $tripkey = htmlspecialchars($key, ENT_QUOTES);
        $salt = htmlspecialchars($key, ENT_QUOTES);
        $salt = substr($tripkey . 'H.', 1, 2);

        $pattern = '/[\x00-\x20\x7B-\xFF]/';
        $salt = preg_replace($pattern, ".", $salt);

        $patterns = ":;<=>?@[\\]^_`";
        $mach = "ABCDEFGabcdef";

        for($i=0; $i<=13-1; $i++){
            $salt = str_replace($patterns[$i], $mach[$i], $salt);
        }

        $trip = crypt($tripkey, $salt);
        $trip = substr($trip, -10);
    }
    $trip = '◆'.$trip;
    return $trip;
}
}}

このような関数でトリップを生成できるとのこと。
情報提供どうもありがとうございます。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS