復号化可能な暗号化のアルゴリズムで以下のようなソースコードが社内にあるのですが、

アルゴリズムがわからないので、何をしているか理解できません。
http://gist.github.com/186594

お知恵をお貸しください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/16 17:37:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:t-wata No.2

回答回数82ベストアンサー獲得回数13

ポイント35pt

与えられた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:webrecdotjp

ありがとうございます。助かりました。

2009/09/16 17:37:10

その他の回答1件)

id:midohaji No.1

回答回数12ベストアンサー獲得回数2

ポイント35pt

換字式暗号の、IDのダイジェストを鍵とした周期換字ではないでしょうか。

http://ja.wikipedia.org/wiki/換字式暗号

id:webrecdotjp

回答ありがとうございます。近いですね。正解かも。

ざっくりとした解説をしていただけると助かります。

2009/09/15 07:27:35
id:t-wata No.2

回答回数82ベストアンサー獲得回数13ここでベストアンサー

ポイント35pt

与えられた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:webrecdotjp

ありがとうございます。助かりました。

2009/09/16 17:37:10

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません