Войдите в Javascript и проверьте во Flask

Легко подписать и проверить в Javascript, используя существующие библиотеки. Однако это сбивает с толку, если мы хотим сгенерировать пару открытого и закрытого ключей в Javascript, подписать текст, а затем проверить во Flask. Я уже знаю некоторые отличия, такие как хеширование по умолчанию на стороне Javascript по сравнению со стороной python. Однако проверка на стороне Flask по-прежнему не выполняется.

index.html

      function send(){
    promise =   window.crypto.subtle.generateKey(algo,
                    true, //whether the key is extractable (i.e. can be used in exportKey)
                    ["sign", "verify"] //can be any combination of "sign" and "verify"
                    );
    console.log(promise)
    promise.then( (keys) => {
        priv = keys.privateKey
        pub = keys.publicKey
        console.log(pub)
        console.log(exportCryptoKey(pub))
        const pub_key_export = exportCryptoKey(pub)
        return pub_key_export.then( (pub_key) => {
            console.log("storing keys in", pub_key)
            signature = window.crypto.subtle.sign(algo, priv, enc_msg);
            signature.then((sign) => {
                sgn = window.btoa(ab2str(sign));
                $.post("verify", {"pub": pub_key, "data": ab2str(enc_msg), "signature": sgn}, function(data){
                    console.log("data", data);
                })
            })
        })
    })
}

verify.py

      def verifySignature(signature, data, pub_key):
    key = RSA.importKey(pub_key)
    h = SHA256.new(data.encode("utf-8"))
    verifier = PKCS1_v1_5.new(key)
    return verifier.verify(h, signature)

1 ответ

Решение

будет кодировать вашу полезную нагрузку в base64 в js, это сделано для предотвращения проблем при передаче необработанных байтов.

вам нужно вызвать метод декодирования в python с помощью чтобы получить фактические зашифрованные байты, которые затем можно расшифровать

Другие вопросы по тегам