@AlexandrBirukov

Почему различаются сигнатуры RSA в php и python?

я не силен в php, есть такой код, который отдает сигнатуру

$json_data=json_encode($data);
$sha1_json_data=sha1($json_data);
$priv_key = openssl_pkey_get_private($key);
$encrypted = '';
openssl_private_encrypt($sha1_json_data, $encrypted, $priv_key);
$b64_encrypted=base64_encode($encrypted);


пытался его перевести на python, использовал несколько способов, но результат отличается от того, что на php при условии, что входные данные одинаковые

jd = json.dumps(data).replace(' ', '').encode('utf8')
# тут данные получаются один в один как в php

with open(BASE_DIR / "local_files/contract.key", "rb") as key_file:
    import rsa
    key = key_file.read()

    contract_key = rsa.PrivateKey.load_pkcs1(key)
    signature = rsa.sign(jd, contract_key, 'SHA-1')
    print(str(b64encode(signature), encoding="utf-8"))

    from cryptography.hazmat.primitives import serialization
    from cryptography.hazmat.primitives import hashes
    from cryptography.hazmat.primitives.asymmetric import padding

    private_key = serialization.load_pem_private_key(key, password=None)
    signature = private_key.sign(
        jd,
        padding.PKCS1v15(),
        hashes.SHA1()
    )
    print(str(b64encode(signature), encoding="utf-8"))


может кто сталкивался с таким уже, как добиться одинакового результата?
  • Вопрос задан
  • 313 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
samodum
@samodum
Какой вопрос - такой и ответ
Я сталкивался. Но у меня Java/.NET было
Как экспортировать RSA private key из Java в виде XML?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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