【发布时间】:2011-12-02 22:49:07
【问题描述】:
我正在为学校作业实施Cipher Block Chaining,问题要求采用String 并返回另一个String 的方法。起初,我认为这很奇怪,byte[] 变量会更合适,但仍然实现了一个方法。基本上,这是代码:
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]
但有时也会吐诸如此类的东西
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(系统的默认编码)有关,但我不太熟悉 究竟为什么会返回给定的字符串字节。
【问题讨论】:
标签: java string utf-8 encryption