Проблема с hash256 в Задаче C - PullRequest
       5

Проблема с hash256 в Задаче C

0 голосов
/ 13 сентября 2010

, когда я использую этот код для создания hash256 в моем приложении для iPhone:

 unsigned char hashedChars[32];
  NSString *inputString;
  inputString = [NSString stringWithFormat:@"hello"];
  CC_SHA256([inputString UTF8String],
      [inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding ], 
      hashedChars);
  NSData * hashedData = [NSData dataWithBytes:hashedChars length:32];

Хэш256 для inputString создан правильно, но если я использую строку, подобную этой @ "\ x00 \ x25 \ x53 \ b4", хэш256 отличается от реальной строки с символами \ x. Я думаю, что проблема в кодировке "UTF8" вместо ASCII. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Вы получаете байты с [inputString UTF8String], но длина с [inputString lengthOfBytesUsingEncoding:NSASCIIStringEncoding].Это явно неправильно.Более того (при условии, что вы имеете в виду «\ xB4» и что оно превращается во что-то, отсутствующее в ASCII), «\ xB4» вряд ли будет в ASCII.Документы для NSString говорят:

Возвращает 0, если указанную кодировку нельзя использовать для преобразования получателя

Итак, вы вычисляете хеш пустой строки.Конечно, это неправильно.

У вас меньше проблем, если вы сгенерируете данные только один раз:

NSData * inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA256(inputData.bytes, inputData.length, hashedChars);
1 голос
/ 13 сентября 2010

Я бы с подозрением отнесся к первому символу "\ x00" - это завершит все, что думает, что он имеет дело с "обычными строками C".

Не уверен, учитывает ли lengthOfBytesUsingEncoding: этот материал,но я бы поэкспериментировал с этим.

...