Не удается проверить подпись RSA на стороне сервера, которая была создана с использованием Javascript на стороне клиента - PullRequest
0 голосов
/ 25 июня 2018

Я использую forge на клиенте, где я создаю подпись следующим образом.

//Client Side
var md = forge.md.sha256.create();
            md.update(encryptedVote, 'utf8');
            var pss = forge.pss.create({
            md: forge.md.sha256.create(),
            mgf: forge.mgf.mgf1.create(forge.md.sha256.create()),
            saltLength: 20
            });
            var signature = privateKey.sign(md, pss);

Затем на сервере я пытаюсь проверить подпись с помощью Библиотека криптографии выглядит следующим образом.

#server side
user_public_key_loaded.verify(
            signature,
            enc_encrypted_vote,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=20
            ),
            hashes.SHA256()
        )

Я постоянно получаю ошибку недопустимой подписи.Я попытался изменить кодировку на клиенте на md.update(encryptedVote, 'latin1'); и теперь иногда работает, а некоторые другие - нет.

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 27 июня 2018

Я обнаружил, что иногда это работает, а иногда нет. перед проверкой я помещал данные JSON в список, выполнив my_list = list(my_dict.values()). И получить доступ к подписи и голосовать, выполнив my_list[0] и my_list[1]. Видимо, порядок данных в списке случайный и время от времени меняется. Таким образом, подпись и голосование меняли место в моей функции, и иногда это работало, а некоторые другие - нет.

...