アルゴリズムがわからないので、何をしているか理解できません。
http://gist.github.com/186594
お知恵をお貸しください。
与えられたIDを、暗号化するためのロジックですね。decryptはencryptの逆なので、encryptだけ説明します。
encryptサブルーチン
IDとsalt文字列と固定のkeyのMD5ハッシュ値を取得して、その先頭6文字をIDの後ろに付与し、_encodeサブルーチンに渡す
_encodeサブルーチン
saltの値を0とする(上記のsaltとは別。ただの数字)
_makeCodeTableで換字式暗号の対応表を作成
入力文字列を先頭から1文字ずつ取り出し、
その文字がテーブルに出現する順番に、saltの値を足した値を計算
上記値に対応する値をテーブルから取り出し置換
saltの値に上記の値を足す
というのを入力文字列に対して繰り返し、上記にて置換済み文字列を末尾から1文字ずつ取り出し、同じロジックを再度実行(つまり2回置換する)
最後に、最終的なsaltの値に対応する文字を末尾に追加
decryptは、入力文字列の末尾の1文字から最終的なsaltの値が分かるので、上記と逆のロジックで元の文字列に戻せます。
これはBase64などのただの符号化と同じで、tableが分かってしまうと(keyとか最初に与えたsaltとは無関係に)IDが分かってしまうため、安全ではありません。
回答ありがとうございます。近いですね。正解かも。
ざっくりとした解説をしていただけると助かります。
与えられたIDを、暗号化するためのロジックですね。decryptはencryptの逆なので、encryptだけ説明します。
encryptサブルーチン
IDとsalt文字列と固定のkeyのMD5ハッシュ値を取得して、その先頭6文字をIDの後ろに付与し、_encodeサブルーチンに渡す
_encodeサブルーチン
saltの値を0とする(上記のsaltとは別。ただの数字)
_makeCodeTableで換字式暗号の対応表を作成
入力文字列を先頭から1文字ずつ取り出し、
その文字がテーブルに出現する順番に、saltの値を足した値を計算
上記値に対応する値をテーブルから取り出し置換
saltの値に上記の値を足す
というのを入力文字列に対して繰り返し、上記にて置換済み文字列を末尾から1文字ずつ取り出し、同じロジックを再度実行(つまり2回置換する)
最後に、最終的なsaltの値に対応する文字を末尾に追加
decryptは、入力文字列の末尾の1文字から最終的なsaltの値が分かるので、上記と逆のロジックで元の文字列に戻せます。
これはBase64などのただの符号化と同じで、tableが分かってしまうと(keyとか最初に与えたsaltとは無関係に)IDが分かってしまうため、安全ではありません。
ありがとうございます。助かりました。
ありがとうございます。助かりました。