У меня есть требование портировать Java-код в объектив. Но я застрял в механизме декодирования, используемом в Java. Из-за неправильного декодирования, используемого в ObjectiveC, мой окончательный вариант не соответствует Java-коду. Ниже приводится код Java, который я застрял:Явное эквивалентное декодирование для ObjectiveC
String s = values.getProperty("s");
byte[] salt = Base64.getDecoder().decode(s);
System.out.println(s);
System.out.println("Salt DECODED = " + salt);
System.out.println("Decoded value as string " + new String(salt));
Выход выше код следующим образом
's' holds the string value "ZB3NNxAMNB/x6JpAryCd0g==",
'salt' holds the value "Salt DECODED = [B[email protected]",
'salt' hold the string value "Decoded value as string d�7"
Когда же я написал в ObjectiveC, я использовал следующий код
NSString *s = parsedMessageDict[@"s"]; //ZB3NNxAMNB/x6JpAryCd0g==
NSData *salt = [[NSData alloc] initWithBase64EncodedString:s options:0];
Разница заключается в том, что в Java salt задано как byte [] и в объективе C, объявленном как NSData. Это делает какие-то проблемы в будущем. Отныне все данные обрабатываются на основе значения. Поэтому я делаю неправильно здесь сам, безусловно, конечный результат будет неправильным.
В объективе C, следует ли декодировать соль как строку и преобразовать в массив байтов или NSData необходимо преобразовать в массив байтов?
Может ли кто-нибудь дать предложение?
Когда вы печатаете '[B @ ...' это не имеет ничего общего со значениями в байте [], это просто говорит, что у вас есть байт [], и он передавал этот хэш-код, который будет случайным каждый раз, когда вы запустить его. Не было бы разумной причины попытаться воспроизвести это. –
NSData * является * байтовым массивом в ObjC. Кажется, это правильная форма. –
@BenZotto Есть ли какая-либо разница b/w nsdata и массив байтов. –