Error de Alipay .NET SDK: la firma RSA encontró una excepción, verifique si el formato de la clave privada es correcto
AlipaySDKNet es el SDK oficial bajo la plataforma .NET para acoplar el pago de Alipay. Alipay SDK para .NET le permite acceder a varias capacidades abiertas a la plataforma abierta de Alipay sin una programación complicada. El SDK puede ayudarlo automáticamente a cumplir con funciones no estándar como verificación de certificados, firma, verificación de firma y envío de solicitudes HTTP requeridas en la capacidad. Proceso de llamada. Requisitos funcionales. Su enlace Nuget es el siguiente: /alipay/alipay-sdk-net-all.
No es difícil integrar el pago Alipay en el programa. Siempre que recuerde que el formato de clave privada utilizado por el programa .NET es PKCS1 y no mezcle los parámetros, no debería ser un. gran problema.
Pero hoy me encontré con un gran problema: el código que antes funcionaba normalmente informó un error después de cambiar la configuración de la cuenta (APPID, clave privada, etc.).
Según la información de la pila cuando se informó el error, el error provino del método:
Basado en el principio de encontrar la causa usted mismo primero, verifiqué los parámetros de configuración desde el principio. Para finalizar, el formato PKCS1 es correcto, la clave privada es correcta, la clave pública es correcta e incluso el gesto de hacer clic con el mouse es correcto.
Probé la DEMO del lenguaje Java (que usa el formato PKCS8). Este conjunto de parámetros también puede funcionar normalmente, lo que significa que la clave en sí no es un problema.
Desesperados, solo nos queda clonar el código localmente a través de GitHub e introducirlo en el proyecto para comenzar a depurar. Encuentre el método BuildRSAServiceProvider cuyo punto de interrupción de informe de errores se encuentra en RSAEncryptor:
/alipay/alipay-sdk-net-all/blob/98fc187884d628d4268504bc0b93eb9a1aae417a/AlipaySDKNet.Standard/Util/Ametric/RSAEncryptor.cs#L234 p>
El propósito de este método es leer la clave privada en formato PKCS1 y construir RSACryptoServiceProvider, pero el proceso de conversión está un poco desactualizado. De hecho, .NET ya proporcionó un método llamado ImportRSAPrivateKey para importar claves en netstandard-2.1. Este código se puede reemplazar directamente.
Primero, debe cambiar el marco de destino de AlipaySDKNet.Standard a netstandard2.1 y luego usar el siguiente código para reemplazar el método BuildRSAServiceProvider:
Compile el proyecto nuevamente y Puedes hacer un pedido normalmente.
Cambiar la clave puede ser la solución más sencilla. Quería informar este problema a Alibaba, pero descubrí que el repositorio no abría la función Problemas. También quería hacer la siguiente mejor opción y no incorporar todo el código fuente del SDK al proyecto (es tan grande, más de quince mil archivos) y simplemente parchear el SDK. Pero esto me resultó difícil de hacer: la implementación de DefaultAopClient parece complicada y BuildRSAServiceProvider está definido como un método estático privado.
Por supuesto que no puedo compartir la clave privada que estoy usando actualmente, pero trabajé un poco y generé una clave privada (formato PKCS1) que informará un error:
Tú también puedes use el siguiente código para intentar generar y probar. Este código se repite 100 veces e intenta convertir la clave usando el método proporcionado por Alibaba SDK:
Después de la prueba, habrá aproximadamente 2 de 100 generaciones. -4 encuentros con llaves inusuales.
Si encuentra el mismo problema que el autor, lea este artículo para resolverlo. Felicitaciones, probablemente seas el elegido. Ve a comprar billetes de lotería después de salir del trabajo, tal vez puedas ganar el premio mayor.
Debido a la superficialidad del autor, este artículo no encontró la razón por la cual BuildRSAServiceProvider no puede cargar la clave privada correctamente, pero se utilizó otro método para evitar el problema. Esto me convence aún más de que ni siquiera los trabajos de los grandes fabricantes son perfectos.
Para resumir brevemente: si encuentra el problema descrito en este artículo, restablezca la clave. Después de todo, el trasplante de cabello es demasiado caro.
Lea el texto original: Error del SDK de Alipay .NET: la firma RSA encontró una excepción; verifique si el formato de la clave privada es correcto. -Los codificadores están muy ocupados