Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente Rsa

Código fuente Rsa

AlipaySDKNet es el SDK oficial para conectarse al pago de Alipay. plataforma NET. Alipay SDK para. NET le permite acceder a las capacidades abiertas de la plataforma abierta de Alipay sin programación complicada. El SDK puede ayudarle automáticamente a cumplir requisitos no funcionales, como verificación de certificados, firma, verificación de firma y envío de solicitudes HTTP. Su enlace Nuget es el siguiente:/Alipay/Alipay-sdk-net-all.

De hecho, no es difícil integrar el pago Alipay en el programa, siempre que recuerdes el formato de clave privada que se utilizará. NET es PKCS1 y los parámetros no se confunden, el problema no debería ser grande.

Pero hoy nos encontramos con un gran problema: el código que antes funcionaba normalmente reportó un error después de cambiar la configuración de la cuenta (APPID, clave privada, etc.). ).

De acuerdo con la información de la pila en el informe de errores, el error provino del método:

De acuerdo con el principio de encontrar la causa usted mismo primero, Drilling verificó la configuración. parámetros de principio a fin. PKCS1 es correcto en formato, claves privadas, claves públicas e incluso gestos del mouse.

Probé la DEMO del lenguaje Java (en formato PKCS8) y este conjunto de parámetros también funciona normalmente, lo que indica que no hay ningún problema con la clave en sí.

Desesperados, solo nos queda clonar el código localmente a través de GitHub, introducir el proyecto y comenzar a depurar. Encuentre el método BuildRSAServiceProvider con el punto de interrupción incorrecto en RSAEncryptor:

/Alipay/Alipay-SDK-net-all/blob/98fc 187884d 628d 4268504 BC 0 b 93 EB 9 a 1 aae 417a/AlipaySDKNet. Standard/Util/Ametric/RSAEncryptor.cs#L234

La función 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 ha proporcionado un método llamado ImportRSAPrivateKey para la importación de claves en netstandard-2.1, y este código se puede reemplazar directamente.

Primero, debe modificar el marco de destino de AlipaySDKNet. Convierta el estándar a netstandard2.1 y luego reemplace el método BuildRSAServiceProvider con el siguiente código:

Vuelva a compilar el proyecto y la secuencia se podrá utilizar normalmente.

Cambiar la clave es probablemente la solución más sencilla. Quería informar este problema a Alibaba, pero descubrí que el almacén no tenía habilitada la función de envío de materiales. También quiero conformarme con la mejor opción. No introduzca todo el código fuente del SDK en el proyecto (demasiado grande, más de 15.000 archivos), solo aplique parches del SDK. Pero me resulta difícil hacer esto: la implementación de DefaultAopClient parece complicada y BuildRSAServiceProvider está definido como un método estático privado.

Por supuesto, no puedo disfrutar de la clave privada que estoy usando ahora, pero trabajé un poco y generé una clave privada (formato PKCS1) que informará errores:

También puede utilizar lo siguiente Intente generar y probar el código, realizar un bucle 100 veces e intentar convertir la clave utilizando el método proporcionado por Alibaba SDK:

Después de la prueba, encontrará claves anormales de aproximadamente 2- 4 veces en 100 generaciones.

Si encuentra el mismo problema que el autor, lea este artículo para resolverlo. Felicitaciones entonces. Quizás seas tú el elegido. Ve a comprar billetes de lotería después de salir del trabajo. Quizás ganes la lotería.

Debido a la superficialidad del autor, este artículo no encuentra la razón por la cual la clave privada no se puede cargar correctamente, pero utiliza otro método para evitar este 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.

Leer el texto original: Alipay. NET SDK informó un error: la firma RSA encontró una excepción; verifique si el formato de la clave privada es correcto. -El granjero está muy ocupado.