私はCipher Block Chainingを学校で使っていますが、String
と返される別のString
というメソッドが必要です。最初は、私はそれが奇妙だと思って、byte[]
の変数がはるかに適切だろうが、まだ方法を実装しました。基本的にコードは次のとおりです。Javaバイト[]から文字列とUTF-8
static public String encode(String message) {
byte[] dataMessage = message.getBytes();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte last = (byte) (Math.random() * 256);
byte cur;
out.write(last);
for (byte b : data) {
cur = (byte) (b^last);
System.out.println("Encode '" + (char) b + "' = " + b + "^" + last + " > " + cur);
out.write(cur);
last = cur;
}
System.out.println("**ENCODED BYTES = " + Arrays.toString(out.toByteArray()));
System.out.println("**ENCODED STR = " + Arrays.toString(out.toString().getBytes()));
return out.toString();
}
decode
の方法も同様です。いくつかの回では、この方法は
Encode 'H' = 72^109 > 37
Encode 'e' = 101^37 > 64
Encode 'l' = 108^64 > 44
Encode 'l' = 108^44 > 64
Encode 'o' = 111^64 > 47
**ENCODED BYTES = [109, 37, 64, 44, 64, 47]
**ENCODED STR = [109, 37, 64, 44, 64, 47]
ような結果を吐くだろう。しかし、時にはまた、私は、これはUTF-8(システムのデフォルトのエンコーディング)とは何かを持っていることを前提とし
Encode 'H' = 72^-63 > -119
Encode 'e' = 101^-119 > -20
Encode 'l' = 108^-20 > -128
Encode 'l' = 108^-128 > -20
Encode 'o' = 111^-20 > -125
**ENCODED BYTES = [-63, -119, -20, -128, -20, -125]
**ENCODED STR = [-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67]
のようなものを吐くだろうが、私は、という正確にを特定するのに十分に精通していないので、そのような文字列が指定されたバイトとともに返されるのはなぜですか。
はい、すべての文字シーケンス(UTF-8には、次のマルチバイト文字の先頭に表示されるようにスキップする自己同期プロパティがあります)は、U + FFFD置換文字で置き換えられますUTF8で:0xef 0xbf 0xbd)。 – ninjalj
はい、これが私の考えです(置換文字について)。そして私はBase64の実装を使用します。 –