【发布时间】:2018-04-27 17:45:29
【问题描述】:
我有一个关于 Java 和 OC xor 的问题:
第一个异或,第二个 Base64
在java中,代码:
String numberStr = ("123456");
char[] array = numberStr.toCharArray();
for (int i = 0; i < array.length; i++)
{
array[i] = (char) (array[i] ^ 1984);
}
String xorStr = new String(array);
byte[] b = null;
String s = null;
try {
b = xorStr.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (b != null) {
try {
s = Base64.encodeToString(b, Base64.DEFAULT);;
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
结果是:37Hfst+z37Tftd+2
在OC中,代码:
NSString *numberString = @"123456";
NSData* bytes = [numberString dataUsingEncoding:NSUTF8StringEncoding];
int8_t * bytePtr = ( int8_t * )[bytes bytes];
NSInteger totalData = [bytes length] / sizeof(int8_t);
NSMutableString *finalString = [NSMutableString new];
for (int i = 0 ; i < totalData; i ++){
bytePtr[i] = (int8_t)(bytePtr[i]) ^ (1984);
[finalString appendString:[NSString stringWithFormat:@"%c",bytePtr[i]]];
NSLog(@"encrypt data = %d", bytePtr[i]);
}
NSData *finalData = [finalString dataUsingEncoding:NSUTF8StringEncoding];
NSString *baseString = [finalData base64EncodedStringWithOptions:0];
结果 baseString 是:w7HDssOzw7TDtcO2
为什么结果不一样?我只知道我的 OC 代码是错误的! 谁能告诉我正确答案?
【问题讨论】:
-
在 8 位值(来自数组)和 16 位值(1984)之间使用 XOR 并将结果存储在 8 位变量中几乎没有意义。但将
int8_t替换为uint8_t可能会有所帮助。而且您的演员阵容不正确。(int8_t)(bytePtr[i]) ^ (1984);应该是(int8_t)(bytePtr[I] ^ 1984);。 -
我把 int8_t 换成了 uint8_t ,用 (uint8_t)(bytePtr[i] ^ 1984),结果还是不一样
标签: java ios objective-c xor