JBCrypt 0.3 С# Port (BCrypt.net)

Изучив ошибку в исходном порту jBCrypt v0.1 С#: BCrypt.net (Связанный вопрос). Я решил сравнить новый код jBCrypt со старым портом С# для поиска расхождений и потенциальных проблем, таких как связанная ошибка вопроса.

Вот что я нашел:

// original java (jBCrypt v0.3):
private static int streamtoword(byte data[], int offp[]) {
 int i;
 int word = 0;
 int off = offp[0];
 for (i = 0; i < 4; i++) {
 word = (word << 8) | (data[off] & 0xff);
 off = (off + 1) % data.length;
 }
 offp[0] = off;
 return word;
}
// port to C# :
private static **** StreamToWord(byte[] data, ref int offset)
{
 **** word = 0;
 for (int i = 0; i < 4; i++)
 {
 // note the difference with the omission of "& 0xff"
 word = (word << 8) | data[offset];
 offset = (offset + 1) % data.Length;
 }
 return word;
}

если предыдущее неверно, следующее исправление?

private static **** StreamToWord(byte[] data, ref int[] offsetp)
{
 **** word = 0;
 int offset = offsetp[0];
 for (int i = 0; i < 4; i++)
 {
 word = (word << 8) | (****)(data[offset] & 0xff);
 offset = (offset + 1) % data.Length;
 }
 offsetp[0] = offset;
 return word;
}
1 ответ

В версии Java требуется & 0xff, потому что в Java байты подписаны. (Некоторые утверждают, что это ошибка.)

В С#, байты без знака, поэтому & 0xff не нужно.

licensed under cc by-sa 3.0 with attribution.