証拠の関数はこれです。

投稿者:   mini ___ 投稿日:2011/09/12 02:04

どうしてこんなことになったのか、私にはわかりません。

これをあなたが読んだなら、その時、私はダラけているでしょう。

…やる気があるか、ないかの違いはあるでしょうが。

これを読んだあなた。どうか意思を継いでください。それだけが私の望みです。

TDA



こういうネタばっかりじゃないか。
いや、最近汎用関数の公開みたいなものが流行ってるみたいなので、
「一応生きてるんだぞ」というアッピルのために投げてみようかなと。

懐かしの地雷ゲーにアクティビティフィードを利用した
パスワード機能を付けようかなと目論んでいたのですが、
インターフェースの作成あたりで爆死。継続しないので力にならぬ。

前述のとおり、使いたい方がどうぞお使いください。

まえがきー

40文字限定 初級中級上級に分ける。
1000000000100000000010000000001000000000

タイムをそれぞれ3桁として、9文字使用することにする
0050231150100000000010000000001000000000
~~~~~~~~~
それぞれに対して678を各桁に印加。ループ方式にする→01234567890123456789012…(x+6)%10
逆の時マイナスが出ると怠いので(x+4)%10とする
6736917830100000000010000000001000000000
~~~~~~~~~
10の倍数文字目をフォーマット判断用に設定、ランダムだが必ず3の倍数になる(x%3 == 0)
6736917836100000000310000000091000000003
         ~         ~         ~         ~
次いで各ハイスコア者の名前を保存。10文字とするか9文字で10字目をフォーマット判断用にするか
使用できる文字は3文字?
abcdefghijklmnopqrstuvwxyz 26文字*2=52
52を3文字フォーマットに直すと4進数くらいが丁度いいかな
使用文字を無作為に摘出 6uwq を右から下位とする。
qqq qqw qqu qq6 qwq qww qwu qw6 quq quw quu qu6 q6q q6w q6u q66   0 1 2 3 4 5 6 7 8 9 a b c d e f 
wqq wqw wqu wq6 wwq www wwu ww6 wuq wuw wuu wu6 w6q w6w w6u w66   g h i j k l m n o p q r s t u v
uqq uqw uqu uq6 uwq uww uwu uw6 uuq uuw uuu uu6 u6q u6w u6u u66   w x y z A B C D E F G H I J K L
6qq 6qw 6qu 6q6 6wq 6ww 6wu 6w6 6uq 6uw 6uu 6u6 66q 66w 66u 666   M N O P Q R S T U V W X Y Z -  
例として名前をabc def gHIとする
6736917836qqqqqwqqu3qq6qwqqww9qwuuw6uuq3
          ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~

このままだとバレやすいので、順番に10文字ごとに1文字ずつ拾って並び替える
6736917836
qqqqqwqqu3
qq6qwqqww9
qwuuw6uuq3
6qqq7qqw3q6u6qqu9qww1wq67qqu8qwu3uwq6393
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

解読手順
a[40]の配列に上記暗号を入力させる
a[36,37,38,39]が3の倍数かどうかを確かめる
初級のスコアを取得  ((a[0]+4)%10)*100+((a[4]+3)%10)*10+((a[8]+2)%10)
中級のスコアを取得  ((a[12]+4)%10)*100+((a[16]+3)%10)*10+((a[20]+2)%10)
上級のスコアを取得  ((a[24]+4)%10)*100+((a[28]+3)%10)*10+((a[32]+2)%10)
初級の名前を取得   
関数c(関数b(関数a(1),関数a(5),関数a(9)))  関数c(関数b(関数a(13),関数a(17),関数a(21))) 関数c(関数b(関数a(25),関数a(29),関数a(33)))
中級の名前を取得   
関数c(関数b(関数a(2),関数a(6),関数a(10))) 関数c(関数b(関数a(14),関数a(18),関数a(22))) 関数c(関数b(関数a(26),関数a(30),関数a(34)))
上級の名前を取得   
関数c(関数b(関数a(3),関数a(8),関数a(11))) 関数c(関数b(関数a(15),関数a(19),関数a(23))) 関数c(関数b(関数a(27),関数a(31),関数a(35)))

関数a → qwu6 を0~3の数字にして返す
関数b → 入力された3つの数字を4進数から10進数にして返す
関数c → 入力された10進数を文字にして返す

# qwu6を0~3にして返す
def F_a(word)
  case (word)
    when "q"
      return 0;
    when "w"
      return 1;
    when "u"
      return 2;
    when "6"
      return 3;
  end;
  speak("error : fanc_a else");
end;

# 3並びの数字を4進数から10進数に変換して返す
def F_b(aa , bb , cc)
  if((aa>3)||(bb>3)||(cc>3))
    speak("error : fanc_b over");
  end;
  return (aa*16)+(bb*4)+(cc);
end;

# 入力された数字を文字で返す
def F_c(x)
  if(x>63)
    speak("error : fanc_c over");
  end;
  case (x)
    when 0
      return "0";
    when 1
      return "1";
    when 2
      return "2";
    when 3
      return "3";
    when 4
      return "4";
    when 5
      return "5";
    when 6
      return "6";
    when 7
      return "7";
    when 8
      return "8";
    when 9
      return "9";
    when 10
      return "a";
    when 11
      return "b";
    when 12
      return "c";
    when 13
      return "d";
    when 14
      return "e";
    when 15
      return "f";
    when 16
      return "g";
    when 17
      return "h";
    when 18
      return "i";
    when 19
      return "j";
    when 20
      return "k";
    when 21
      return "l";
    when 22
      return "m";
    when 23
      return "n";
    when 24
      return "o";
    when 25
      return "p";
    when 26
      return "q";
    when 27
      return "r";
    when 28
      return "s";
    when 29
      return "t";
    when 30
      return "u";
    when 31
      return "v";
    when 32
      return "w";
    when 33
      return "x";
    when 34
      return "y";
    when 35
      return "z";
    when 36
      return "A";
    when 37
      return "B";
    when 38
      return "C";
    when 39
      return "D";
    when 40
      return "E";
    when 41
      return "F";
    when 42
      return "G";
    when 43
      return "H";
    when 44
      return "I";
    when 45
      return "J";
    when 46
      return "K";
    when 47
      return "L";
    when 48
      return "M";
    when 49
      return "N";
    when 50
      return "O";
    when 51
      return "P";
    when 52
      return "Q";
    when 53
      return "R";
    when 54
      return "S";
    when 55
      return "T";
    when 56
      return "U";
    when 57
      return "V";
    when 58
      return "W";
    when 59
      return "X";
    when 60
      return "Y";
    when 61
      return "Z";
    when 62
      return "-";
    when 63
      return " ";
  end;
end;

# xにyを足す 但し0~zの範囲をループする
def F_d(x , y , z)
  x=x+y;
  if(x<0)
    x=z;
  elsif(x>z)
    x=0;
  end;
  return x;
end;



最近の運営様の活躍っぷりを見てると、普通に入力式のパスワードなんて
公式関数で実装してもらえるんじゃね?とか考えた結果がコレだよ。

甘えは怠けに繋がるから良くないんですけど、現在進行形でこのザマでござる。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

   mini ___(投稿日:2011/09/12 21:07, 履歴)
>>rurun9さん
 パスワードをアクティビティフィードで出力するということは、
 今までのパスワードも累積されて表示されるということで、
 「このパスだとこのスコアになるから、多分こっからここが中級のスコアで~」
 みたいな解析されて、改造スコアを入力してプレイ後にアクティビティ出力されたら嫌だなー
 なんて妄想しながら書いてたもので。

 描いてもらうか自分で描くか割と悩んでます。
 新しいスプライト関数も出てきましたしどうしよっかな。
Nyan mini rurun9(投稿日:2011/09/12 11:24, 履歴)
>このままだとバレやすいので

いやいやいやw
たった4文字で暗号化されると逆にドコまでが区切りなのかワカリマセンてば。

9月はカレンダーに赤い日があるしそろそろ本気出さないと全コン間に合わなひ