2016-05-08 10 views
0

私はATOM-128 例では、任意の文字列を暗号化してAndroidアプリを作るしようとしています:入力 "こんにちは" /出力 "MIH3 +/CC + QCC" 私はすでに(Windowsデスクトップアプリ)のC#でそれを試してみましたが、それは私がアンドロイドスタジオでのJavaと同じことをしようとしたとき、私はこの結果を持ってうまく機能しています: 入力「hello」を 「2662144270646427486464」ATOM-128文字列の暗号化/復号化(アンドロイドスタジオ)

oututこれはCODE

IS
public class ATOM { 
public static String Encrypt(String clearText) 
{ 
    String key = "/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC"; 
    StringBuilder result = new StringBuilder(); 
    int i = 0; 
    int[] indexes = new int[4]; 
    int[] chars = new int[3]; 
    do 
    { 
     chars[0] = i + 1 > clearText.length() ? 0 : (int)clearText.toCharArray()[i++]; 
     chars[1] = i + 2 > clearText.length() ? 0 : (int)clearText.toCharArray()[i++]; 
     chars[2] = i + 3 > clearText.length() ? 0 : (int)clearText.toCharArray()[i++]; 
     indexes[0] = chars[0] >> 2; 
     indexes[1] = ((chars[0] & 3) << 4) | (chars[1] >> 4); 
     indexes[2] = ((chars[1] & 15) << 2) | (chars[2] >> 6); 
     indexes[3] = chars[2] & 63; 
     if ((char)chars[1] == 0) 
     { 
      indexes[2] = 64; 
      indexes[3] = 64; 
     } 
     else if ((char)chars[2] == 0) 
     { 
      indexes[3] = 64; 
     } 

     for (int index : indexes) 
     { 
      result.append(index); 
     } 
    } 
    while (i < clearText.length()); 
    return result.toString(); 
} 
public static String Decrypt(String clearText) 
{ 
    String key = "/128GhIoPQROSTeUbADfgHijKLM+n0pFWXY456xyzB7=39VaqrstJklmNuZvwcdEC"; 
    StringBuilder result = new StringBuilder(); 
    int[] indexes = new int[4]; 
    int[] chars = new int[3]; 
    int i = 0; 
    do 
    { 
     indexes[0] = key.indexOf(i++); 
     indexes[1] = key.indexOf(i++); 
     indexes[2] = key.indexOf(i++); 
     indexes[3] = key.indexOf(i++); 
     chars[0] = (indexes[0] << 2) | (indexes[1] >> 4); 
     chars[1] = (indexes[1] & 15) << 4 | (indexes[2] >> 2); 
     chars[2] = (indexes[2] & 3) << 6 | indexes[3]; 
     result.append((char)chars[0]); 
     if (indexes[2] != 64) 
      result.append((char)chars[1]); 
     if (indexes[3] != 64) 
      result.append((char)chars[2]); 
    } 
    while (i < clearText.length()); 
    return result.toString(); 
} 

}

+0

**暗号ない**、ATOM-128は、Base64でエンコードに似** **であると思われます。ところで、あなたはATOM-128仕様へのリンクを提供できますか? – zaph

+0

申し訳ありませんが、ATOM-128の仕様を記述したリンクが見つかりません –

+0

申し訳ありませんがATOM-128仕様を記述するリンクが見つかりませんでした。以下の答えを試しましたが、まだ何もありません。 –

答えて

0

StringBuilderのドキュメントを見て:

public StringBuilder append (int i) 

Appends the string representation of the specified int value. 
The int value is converted to a string according to the rule defined by valueOf(int). 

だから、毎回あなたはあなたが実際の数の文字列表現を追加し

result.append(index); 

を呼び出します。最初に行う必要があるのは、intを解析してchar ASCII表現にすることです。

result.append(((char)index)); 

とする必要があります。ドキュメントへ

リンク: http://developer.android.com/reference/java/lang/StringBuilder.html#append(int)

+0

closeしかし、今すぐ同じ文字列(こんにちは)私は "、@@ 0 @@" –

関連する問題