Не удается проверить подпись

Короткий ответ: Не делайте этого

Длинный ответ: вот как будет вычисляться ключ:

Фактическим ключом будет объект java.lang.Double поскольку ключи должны быть объектами. Вот его метод hashCode():

public int hashCode() {
  long bits = doubleToLongBits(value);
  return (int)(bits ^ (bits >>> 32));
}

Метод doubleToLongBits() в основном принимает 8 байтов и представляет их как долго. Таким образом, это означает, что небольшие изменения в вычислении double могут означать много, и у вас будут ключевые промахи.

Если вы можете рассчитывать на определенное количество точек после точки - умножить на 10 ^ (число цифр после точки) и конвертировать в int (например, для двух цифр умножить на 100).

Это будет намного безопаснее.

0
задан Jordan Running 19 March 2019 в 14:13
поделиться

1 ответ

Я понятия не имею, почему, но мне пришлось изменить функцию проверки на следующую, и теперь она работает.

function verify(hash, publicAddress, signature) {
  const messageHash = Hash(hash);
  const publicKeyPair = ec.keyFromPublic(publicAddress, 'hex'); // use the accessible public key to verify the signature
  return publicKeyPair.verify(messageHash, JSON.parse(signature));
}
0
ответ дан Peter Štieber 19 March 2019 в 14:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: