-1

まず第一に、これは他の人から与えられた宿題やその他の課題ではありません。これは、より安全にしたいゲームアプレットの機能です。この関数を使用すると、ゲームのハンドシェイク部分のパスワードを生成できます。しかし、すべてのプレイヤーに同じエンコードされたパスワードを使用するのは、愚かなことです。攻撃に対して非常にオープンになり、これが私がいる状況です。これが、この関数が何をするかを分析し、すべての一意の接続に対してパスワードを生成する方法を考え出す理由です。だから、私を理解しようとしてください。

関数は次のとおりです。

public String g(String paramString)
  {
    boolean bool = d.r;
    try
    {
      if (!bool)
      {
        if (paramString.length() < 3)
        {
          a(tc[2]);
          return "";
        }
        if (bool);
      }
      else
      {
        if (paramString.length() > 200)
        {
          a(tc[3]);
          return "";
        }
        paramString = paramString.toLowerCase();
      }
      String str1 = "";
      String str2 = paramString;
      paramString = paramString.toLowerCase();
      char[] arrayOfChar1 = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ' };
      char[] arrayOfChar2 = { 'x', 'f', 'n', 'g', 'd', '9', 's', 'j', 'o', 'q', '5', 'a', 'z', 'w', '6', '0', 'e', '4', 'c', 'r', '1', 'v', 't', '3', 'b', 'y', 'h', '2', 'u', '7', 'm', 'i', 'k', '8', 'l', 'p', '?' };
      char[] arrayOfChar3 = { 'f', 'e', '8', 'r', 'k', 't', '7', 'b', 'c', 'm', 'o', 'q', '2', '3', 'g', 's', 'n', 'x', '0', 'p' };
      char[] arrayOfChar4 = paramString.toCharArray();
      char[] arrayOfChar5 = str2.toCharArray();
      int i1 = 0;
      if (bool);
      do
      {
        int i2 = 0;
        int i3 = 0;
        if (bool);
        do
          do
          {
            if (!bool)
            {
              if (arrayOfChar4[i1] == arrayOfChar1[i3])
                i2 = 1;
            }
            else
            {
              int i4 = paramString.length();
              int i5 = (int)Math.round(Math.random() * 19.0D);
              int i6 = i3 + i5 + i4;
              if (bool);
              String str3;
              do
              {
                do
                  i6 -= arrayOfChar2.length;
                while (i6 >= arrayOfChar2.length);
                str1 = str1 + "" + arrayOfChar3[i5];
                str3 = String.valueOf(arrayOfChar2[i6]);
              }
              while (bool);
              if (arrayOfChar4[i1] != arrayOfChar5[i1])
                str3 = str3.toUpperCase();
              str1 = str1 + "" + str3;
            }
            i3++;
          }
          while (i3 < arrayOfChar1.length);
        while (bool);
        if (i2 == 0)
          str1 = str1 + "\\" + arrayOfChar4[i1];
        i1++;
      }
      while (i1 < arrayOfChar4.length);
      return str1;
    }
    catch (Exception localException)
    {
    }
    return "";
  } 

そして、これはそれによって生成されたいくつかの例です:

    aaa -> cafg89  
    aaa -> ca3eca  
    aaa -> q6fged  
    aaa -> fgg4ow  
    aaaa -> tqp3srmw  
    aaaa -> 75e9rjcz  
    bbb -> o6q00t  
    bbb -> 0tczcz  
    bbbb -> 03o0bzo0  
    bbbb -> rogrt5kq 

しかし、最も疑わしい例は次のとおりです。

1111111 -> 00000000000000  
222222 -> 000000000000  
33333 -> 0000000000  
5555555 -> m5m5m5m5m5m5m5  
666666 -> m5m5m5m5m5m5  
77777 -> m5m5m5m5m5  
8888 -> m5m5m5m5  
999 -> m5m5m5  

私は今、少し必死になっているので、運を押し上げています。いつもお言葉ありがとうございます。

4

2 に答える 2

2

逆コンパイラがバイトコードの動作に一致するコードを生成することに成功したという疑いがあります。たとえば、コードはif (bool);いくつかの場所で述べており、なぜバイトコードがそれを行うのかを理解するのは困難です. 逆コンパイルされたコードを信頼できない場合は、コードから引き出す結論に疑問が生じるはずです。


もう1つのポイントは、ここでのあなたの仮定です:

この関数を使用すると、ゲームの握手部分のパスワードを生成できます。しかし、すべてのプレイヤーに同じエンコードされたパスワードを使用するのは、愚かなことです。

あなたが提供する出力から、このコードが特定の入力に対して同じ出力を生成しないことは明らかです。Randomそして、スクランブリング アルゴリズムの一部として繰り返し呼び出しているように見えることを考えると、そうであったとしたらかなり驚くべきことです。

要するに、存在しない問題を修正しようとしています...または少なくともあなたが説明した形式ではありません。

于 2012-07-22T11:34:09.047 に答える
0

一意の接続ごとに一意のパスワードを生成するには、次のようなものを使用できます。

SHA256(secret + connectionNumber + dateAndTime)

secretは、必要に応じて何度でも変更できる固定の秘密のパスワードです。

connectionNumberは、その日までに行われた接続の数です。

dateAndTime標準形式の現在の日時です。

3 つすべてを文字列に変換し、連結して SHA-256 を適用します。これにより、バイト配列が得られます。バイトではなくテキストが必要な場合は、Base64 を使用して変換します。

例えば:

String password = Base64(SHA256("myBIGsecret52012-07-23T13:06:25.254Z"));
于 2012-07-23T12:09:57.437 に答える