Java で Cipher を作成していますが、次のことができません: char 配列の値を編集して暗号化したい
どうすればいいですか?
各文字の ASCII 値を変更することが答えかもしれませんが、わかりません。だからみんなに聞いてるんだ!
Java で Cipher を作成していますが、次のことができません: char 配列の値を編集して暗号化したい
どうすればいいですか?
各文字の ASCII 値を変更することが答えかもしれませんが、わかりません。だからみんなに聞いてるんだ!
に を追加することはできますint
がchar
、結果は- になります。複合代入演算子を使用しない限り、配列に戻すにはint
にキャストバックする必要があります。char
array[x] += someInt;
また
array[x] = (char) (array[x] + someInt);
ただし、通常、これは暗号化を実行する適切な方法ではありません。多くの場合、印刷できない文字、または Unicode で特定の意味さえも持たない文字になってしまいます。代わりに、ほとんどの暗号化アルゴリズムは、任意のバイナリデータ (つまり、バイト配列) で動作するように設計されています。
通常、最初に文字列をバイト配列に変換します (たとえば、String.getBytes(charset)
- エンコーディングを確実に指定します)。次に、バイト配列で暗号化を実行し、新しいバイト配列を提供します。本当にテキストに戻す必要がある場合は、base64 を使用してください。通常のテキスト エンコーディングではテキスト データがエンコードされていないため、使用しないでください。new String(encryptedBytes)
Java では、char
とint
は互換性のある型なので、+
演算子で追加するだけです。
char c = 'c';
int x = 10;
c + x
結果は整数になるため、文字変数に割り当てるには明示的なキャストが必要です。
c = (char)(c + x); // After this assignment, c = 'm'
単純な対称回転暗号は、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
以下のように、int を char に追加しvalue
、型キャストを char に戻します。
char a = 'a';
char b = (char)(a+5);
System.out.println(b); //<-prints "f"
文字配列では、
charArray[index] = (char)(charArray[index] + intValue);