Python 中的 nodejs crypto crypto.createSign 等价物

Equivalent of nodejs crypto crypto.createSign in Python

我想得到与 Python 相同的结果。

function generateSignature(baseString, privateKey, clientSecret) {
  var signWith = {
    key: (privateKey)
  }; // Provides private key

  if (!_.isUndefined(clientSecret) && !_.isEmpty(clientSecret)) _.set(signWith, "passphrase", clientSecret);

  // Load pem file containing the x509 cert & private key & sign the base string with it to produce the Digital Signature
  var signature = crypto.createSign('RSA-SHA256')
    .update(baseString)
    .sign(signWith, 'base64');

  return signature;
}

我在 Python

中做了什么
    import base64
    from cryptography.hazmat.primitives.asymmetric import dsa, rsa
    from cryptography.hazmat.primitives.serialization import load_pem_private_key
    private_key = load_pem_private_key(
        str.encode(str_private_key),
        password=None)

    plain_text = b'abc'
    signature = private_key.sign(
        data=plain_text,
        padding=padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        algorithm=hashes.SHA256()

    )

    print(base64.b64encode(signature))

不知从何说起。加密文档很短。如何在加密中使用密码?

NodeJS代码使用PKCS#1 v1.5 padding,Python代码使用OAEPadding。要在 Python 中也应用 PKCS#1 v1.5,请按如下方式更改填充:

signature = private_key.sign(
    data=plain_text,
    padding=PKCS1v15(),         # Fix: Apply PKCS#1 v1.5
    algorithm=hashes.SHA256()
)