diff --git a/src/crypto/public_key/rsa.js b/src/crypto/public_key/rsa.js
index bdbf36c3..2343eb3e 100644
--- a/src/crypto/public_key/rsa.js
+++ b/src/crypto/public_key/rsa.js
@@ -140,8 +140,15 @@ export async function encrypt(data, n, e) {
  * @async
  */
 export async function decrypt(data, n, e, d, p, q, u, randomPayload) {
-  if (util.getNodeCrypto()) {
-    return nodeDecrypt(data, n, e, d, p, q, u, randomPayload);
+  // Node v18.19.1, 20.11.1 and 21.6.2 have disabled support for PKCS#1 decryption,
+  // and we want to avoid checking the error type to decide if the random payload
+  // should indeed be returned.
+  if (util.getNodeCrypto() && !randomPayload) {
+    try {
+      return await nodeDecrypt(data, n, e, d, p, q, u);
+    } catch (err) {
+      util.printDebugError(err);
+    }
   }
   return bnDecrypt(data, n, e, d, p, q, u, randomPayload);
 }
@@ -443,7 +450,7 @@ async function bnEncrypt(data, n, e) {
   return data.modExp(e, n).toUint8Array('be', n.byteLength());
 }
 
-async function nodeDecrypt(data, n, e, d, p, q, u, randomPayload) {
+async function nodeDecrypt(data, n, e, d, p, q, u) {
   const { default: BN } = await import('bn.js');
 
   const pBNum = new BN(p);
@@ -477,9 +484,6 @@ async function nodeDecrypt(data, n, e, d, p, q, u, randomPayload) {
   try {
     return new Uint8Array(nodeCrypto.privateDecrypt(key, data));
   } catch (err) {
-    if (randomPayload) {
-      return randomPayload;
-    }
     throw new Error('Decryption error');
   }
 }
diff --git a/test/general/signature.js b/test/general/signature.js
index 914a13e3..25fc119d 100644
--- a/test/general/signature.js
+++ b/test/general/signature.js
@@ -1188,7 +1188,7 @@ Fk7EflUZzngwY4lBzYAfnNBjEjc30xD/ddo+rwE=
       ],
       config
     });
-    expect(openpgp.decrypt({
+    await expect(openpgp.decrypt({
       message: await openpgp.readMessage({ armoredMessage: message_with_notation }),
       decryptionKeys: privKey,
       verificationKeys: privKey,