3

Java で Cipher を作成していますが、次のことができません: char 配列の値を編集して暗号化したい

どうすればいいですか?

各文字の ASCII 値を変更することが答えかもしれませんが、わかりません。だからみんなに聞いてるんだ!

4

5 に答える 5

11

に を追加することはできますintchar、結果は- になります。複合代入演算子を使用しない限り、配列に戻すにはintにキャストバックする必要があります。char

array[x] += someInt;

また

array[x] = (char) (array[x] + someInt);

ただし、通常、これ暗号化を実行する適切な方法ではありません。多くの場合、印刷できない文字、または Unicode で特定の意味さえも持たない文字になってしまいます。代わりに、ほとんどの暗号化アルゴリズムは、任意のバイナリデータ (つまり、バイト配列) で動作するように設計されています。

通常、最初に文字列をバイト配列に変換します (たとえば、String.getBytes(charset)- エンコーディングを確実に指定します)。次に、バイト配列で暗号化を実行し、新しいバイト配列を提供します。本当にテキストに戻す必要がある場合は、base64 を使用してください。通常のテキスト エンコーディングではテキスト データがエンコードされていないため、使用しないでください。new String(encryptedBytes)

于 2012-11-29T16:35:50.017 に答える
5

Java では、charintは互換性のある型なので、+演算子で追加するだけです。

char c = 'c';
int x = 10;

c + x結果は整数になるため、文字変数に割り当てるには明示的なキャストが必要です。

c = (char)(c + x); // After this assignment, c = 'm'
于 2012-11-29T16:34:22.277 に答える
0

単純な対称回転暗号は、26 文字のアルファベットを使用する場合、データのエンコードとデコードの両方に同じ関数を使用します。

public class Rot13 { 
    public static void main(String[] args) {
        String s = args[0];
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if       (c >= 'a' && c <= 'm') c += 13;
            else if  (c >= 'A' && c <= 'M') c += 13;
            else if  (c >= 'n' && c <= 'z') c -= 13;
            else if  (c >= 'N' && c <= 'Z') c -= 13;
            System.out.print(c);
        }
        System.out.println();
    }
}

ソースはこちら

上記の例では、char であるchar初期コンテナー ( ) 内に結果を格納する「追加および割り当て」演算子があるため、へのキャストは必要ありません。char c

于 2012-11-29T16:35:05.727 に答える
0

以下のように、int を char に追加しvalue、型キャストを char に戻します。

  char a = 'a';
  char b = (char)(a+5);
  System.out.println(b);  //<-prints "f"

文字配列では、

     charArray[index] = (char)(charArray[index] + intValue);
于 2012-11-29T16:36:28.583 に答える