したらばのトリップ生成について

したらばのトリップ生成規則は2ちゃんねると一部非互換であり、トリップキーによっては2ちゃんねると違うトリップが出てしまいます。
どんな文字があると化けるかというのはぐぐればある程度出てきましたが、じゃあどんな生成規則なのかについてはいまいちヒットしませんでした。
じゃあ、ないなら調べてしまえということで、したらばのトリップ生成規則についてちまちま調べてみましたのでメモとして残しておきます。

※注意:ここに書いてある内容に付いての正確性は一切保証しません。

トリップ生成規則の推測

検証用コード

したらばのトリップ生成は以下のようになっていると推測できます。

#!/usr/local/bin/perl
use Jcode;

$key=",aaaa"; #トリップキー(#の右側)

$enc=$key;
$enc=~s/&/&amp/g;
$enc=~s/\</&lt;/g;
$enc=~s/\>/&gt;/g;
$enc=~s/\"/&quot;/g;
$enc=Jcode->new($enc)->sjis;
$enc=~s/\,/\x81\x97\x81\x4d/g;

$salt=substr($enc."H.", 1, 2); 
$salt=~s/[^0-9A-Za-z_]/./g;

$trip=substr(crypt($enc, $salt), -8); 
print "$trip\n"; # 計算されたトリップ

トリップキーの一部の文字を置換してからsaltを取り出し、トリップ計算を行なっています。
また、したらばは文字コードがEUC-JPであり、ShiftJISの2ちゃんねると同じバイト列を得るためにはあらかじめ文字コードを変換する必要があります。

トリップキーの2文字目と3文字目からsaltを取り出したり、crypt()の結果の後ろから8文字(現在の2ちゃんねるでは10文字)取り出す処理は2ちゃんねると同じです。

文字置換規則

したらばでは以下の5文字を置換してからsaltの取り出し、トリップの計算を行っています。

&
'&'は'&amp'に置換しています。何故か'&amp;'ではなく'&amp'です。
<
'<'は'&lt;'に置換しています。
>
'>'は'&gt;'に置換しています。
"(ダブルクォーテーション)
'"'(ダブルクォーテーション)は'&quot;'に置換しています。
,(カンマ)
','(カンマ)は'0x81 0x97 0x81 0x4d'というバイナリ列(ShiftJISでは「@`」)に置換しています。いまいちこの値の意味が分かりませんが、トリップ計算の結果は一致します。

"_"(アンダースコア)の扱い

saltに"_"(アンダースコア)が入った場合、cryptの実装の違いにより計算結果が異なったり、アンダースコアを6文字以上並べるとcryptが空文字列を返したりします。
したらばのサーバはこの実装に含まれますので、違う実装のマシンで計算したトリップがしたらばと異なったりします。

またしたらばでは、トリップキーにアンダースコアを6文字以上入れるとトリップが空で表示されます。

参考文献

  1. ◆ 全サーバトリップ統一作戦 (http://qb5.2ch.net/test/read.cgi/operate/1067245837/)