收藏
回答

微信公众号jsapi下单支付通过私钥加密遇见Internal Server: 系统找不到指定的文件。

代码: protected string Sign(string message)

 {

     // NOTE: 私钥不包括私钥文件起始的-----BEGIN PRIVATE KEY-----

     //        亦不包括结尾的-----END PRIVATE KEY-----

     string keyFilePath = AppDomain.CurrentDomain.BaseDirectory + "apiclient_key.pem";

     string privateKey = System.IO.File.ReadAllText(keyFilePath);

     byte[] keyData = Convert.FromBase64String(privateKey.Replace("-----BEGIN PRIVATE KEY-----", "")

                                                      .Replace("-----END PRIVATE KEY-----", "")

                                                      .Replace("\n", "")

                                                      .Replace("\r", ""));

     //byte[] keyData = Convert.FromBase64String(privateKey);

     var rsa = RSA.Create();

     rsa.ImportPkcs8PrivateKey(keyData, out _);

     byte[] data = System.Text.Encoding.UTF8.GetBytes(message);

     return Convert.ToBase64String(rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1));

 }


遇到的问题:

Internal Server: 系统找不到指定的文件。

User data verification failed. Please input it correctly.


Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException: 系统找不到指定的文件。

at System.Security.Cryptography.CngKeyLite.ImportKeyBlob(String blobType, ReadOnlySpan`1 keyBlob, Boolean encrypted, ReadOnlySpan`1 password)

at System.Security.Cryptography.CngPkcs8.ImportPkcs8(ReadOnlySpan`1 keyBlob)

at System.Security.Cryptography.CngPkcs8.ImportPkcs8PrivateKey(ReadOnlySpan`1 source, Int32& bytesRead)

at System.Security.Cryptography.RSAImplementation.RSACng.ImportPkcs8PrivateKey(ReadOnlySpan`1 source, Int32& bytesRead)

at MRPrintWeChatAppointment.Web.Entry.Controllers.HttpHandler.Sign(String message)

at MRPrintWeChatAppointment.Web.Entry.Controllers.HttpHandler.BuildAuthAsync(HttpRequestMessage request)

at MRPrintWeChatAppointment.Web.Entry.Controllers.HttpHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)

at MRPrintWeChatAppointment.Web.Entry.Controllers.WxPayController.PaymentOrder(String openId, String orderId, Decimal totalFee)

at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)

at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()

--- End of stack trace from previous location ---

at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

json

HTTP ERROR 500

回答关注问题邀请回答
收藏

1 个回答

登录 后发表内容