支付宝。NETSDK报错RSA签名遭遇异常,请检查私钥格式是
AlipaySDKNet是。NET平台下用于对接支付宝支付的官方SDK。AlipaySDKfor。NET让您不用复杂编程即可访问支付宝开放平台开放的各项能力,SDK可以自动帮您满足能力调用过程中所需的证书校验、加签、验签、发送HTTP请求等非功能性要求。其Nuget链接如下:https:www。nuget。orgpackagesAlipaySDKNet。Standard。GitHub开源地址为:https:github。comalipayalipaysdknetall。
要在程序中集成支付宝支付其实并不困难,只要谨记。NET程序要用的私钥格式是PKCS1且不把参数搞混问题应该都不大。
但是今天,却遇到一个大问题:之前正常工作的代码在更换了账户配置(APPID、私钥等)之后竟然报错了。Aop。Api。AopException:RSA签名遭遇异常,请检查私钥格式是否正确。Indexwasoutsidetheboundsofthearray。
根据报错时的堆栈信息,该错误来自于方法:Aop。Api。Util。Asymmetric。RSAEncryptor。BuildRSAServiceProvider
本着先从自己找原因的原则冲头到尾检查了配置参数,PKCS1格式是对的、私钥是对的、公钥是对的甚至点鼠标的手势也是对的。
尝试了Java语言的DEMO(其采用的是PKCS8格式),这套参数也是可以正常工作的那就说明密钥本身是没问题的。
无奈之下只能通过GitHub将代码克隆到本地并引入项目开始调试。找到报错断点位于RSAEncryptor的BuildRSAServiceProvider方法:
https:github。comalipayalipaysdknetallblob98fc187884d628d4268504bc0b93eb9a1aae417aAlipaySDKNet。StandardUtilAsymmetricRSAEncryptor。csL234
这个方法的作用是读取PKCS1格式私钥并构建RSACryptoServiceProvider,但转换过程略显过时。其实,。NET在netstandard2。1时已经提供了名为ImportRSAPrivateKey的方法用于导入密钥,这段代码可以直接被替换掉。
首先需要将AlipaySDKNet。Standard的目标框架修改为netstandard2。1,接着使用以下代码替换BuildRSAServiceProvider方法:privatestaticRSACryptoServiceProviderBuildRSAServiceProvider(byte〔〕privateKey){varrsanewRSACryptoServiceProvider();rsa。ImportRSAPrivateKey(privateKey,out);returnrsa;}
再次编译项目,已经可以正常下单使用了。问题找到了,然后呢?
换一个密钥也许是最简单的方案。想要向阿里反馈这个问题,却发现该仓库并未开放Issues功能。我也想退而求其次,不要在项目中引入整个SDK的源代码(它太大了,有一万五千多个文件)只对SDK打补丁。但我发现这很难做到:DefaultAopClient的实现看上去很复杂,而且BuildRSAServiceProvider被定义为了一个私有的静态方法。如何复现这个问题?
我当然不能把我现在使用的私钥共享出来,但我做了一些工作又生成了一个会报错的私钥(PKCS1格式):
MIIEowIBAAKCAQEApkzj3skhpd2e0d8BUbDkuL6khflsJLzoQwGq25mm5fn2MDN3MPlh0XtWoM6OOIigvQFFj295UxNI4oGrWLoYA0g2MWlttLHPZ2ivhCSSizw9OJtAg8NgmkDM8dygAhyUQja2ZoACWrNrQa4DC10GXpRi85ZGMEBcKZnUwlwYan31rVtgdULZ0lW3yiWYtMaGKoTBWQZ3bjUzCUOxcuCK6ZYUho65YxJazQdTmduxW7ghgGILqvoyh1PS1ZbJeCJ3t6rxsoCDfKV7ldMUrWYKjMewvj6JritxgsmFE80f12mMqDimLhJX8nTqQQ2kajEazkvZQNxaQIDAQABAoIBAACq2FNBjX2uxvwunu7AP4yI5wQRYubnjHNNqx2u1B0XZ8gLiEZ7vIre1RRuLVMYfwpF3RbOmpWD4IdS6SpS8GMCl8mdMaz5FDq0ileO0UHc7HWLfupcmYrvndf8riYHnvjEXXB6tjgutiheWlPr2L3uFUXg29hGEqW98dSffYIWrdYOcFa1wWnR6wFOEXqGcAppKKADosHCqA8S5MtPcGbZPIJwcJExGsXsy1aoslB6hgAyJOmnY2w2o5V30I1QzhgiwCGAHK4pNABRtXwzGnSjfzdkrUb0irytvFrHjRMuYHFaEJ8cSncc2sh87Zia5e6H6I00CgYEA1d6oRlMCpfleUee0jl7KsGnqdoquipC7vNVjfPsSuGbXy9NRtN4rSymfHsQA8zExmHfQjtk3kS64HXkUZRVrACNCLM6mgcEEshixRntaZJdARruPb45JBkhnjtmmQJ4BY06GTqtsflnaPJEv5wvReBlByThOcHIfcOeUYfGcCgYEAxw9VAZfXxeVGT7skxxu1568OyrS7tysaMVy6Uufztd6hY3ZTVV1QFxj8fku9miVFLCvhU4Z3HrahRmGNZ7XT0Cgm8ZhFhKKR7gQlAMAmLeSGgAUbjQ3BEKG5NXKqsFpAisoEV5MoZ3eQuVGQ5JApbKZlhIVOX2Kq9gqmAa8CgYEAhfT9n3a1DPKBsnmX7SjQeekNc4xvwNjgzmk19H1qf1fjSIanA7obVxTFfuix4j9q7Ps2lMyQ5GtWRetxwtOMfryW4WvafSFB6K9wsj3nI2RdzOmiWcgBEGwxU2PPYn1aYdfQkSbgzr3xmJlOmFmifnkLroraC4wmbvLgPL3cCgYA25PKDSvV1HIIkY5jGVbBzhF2QSNL8jhx5lCHZVkKOzvt5wyFvmAXwhMJlbTGV4DGU4XHU65Mva8oI6fEx3kwM7Vs4zxyRU6u35Uzg3KRDMDKucwfLgZUPaxHdT1vhdQ7ZSz90csPPEif2WIxYaYkWzrCoQqZHy1b0dILK2UwKBgFAmZrWiB1mLp8hdLp49FctfKKH16t6CkhEzh0sElaRcuLQm5nGSxBbPm7QeLxZBD12ugnj0czcRPfjWDNDTHghnXrDNsVuQ8oUdrCQpwHgHpoeOzZaoX1RSSRceuZOiRaDJMrf1CGiLcXIE0YvlJFeDCTlx6cOTFn7T
你也可以使用以下代码尝试生成并测试,该代码循环100次,并尝试用阿里SDK提供的方法对密钥进行转换:for(inti0;i100;i){varrsaRSA。Create();varkeysrsa。ExportRSAPrivateKey();try{BuildRSAServiceProvider(keys);}catch(Exceptionex){Console。WriteLine(Convert。ToBase64String(keys));}}
经测试,一百次生成中大概会有24次遇到异常密钥。
如果你遇到了和笔者一样的问题,并且通读本文解决了你的问题。那么恭喜你,你大概就是天选之子,下班后去买彩吧,说不定能中大奖。后记
受制于笔者的浅薄,本文并没有找到BuildRSAServiceProvider不能正确加载私钥的原因,但使用另一种方法规避了该问题。这让我更加坚信,即便是大厂的作品也不是完美无瑕。
简单总结一下:如果你遇到了本文所述的问题,那么就重置一下密钥吧。植发毕竟太贵了。
阅读原文:支付宝。NETSDK报错:RSA签名遭遇异常,请检查私钥格式是否正确。码农很忙
美丽的西湖满分作文美丽的西湖作文400字我的家乡在杭州,那里最美丽的地方就是西湖了。那里风景优美,一年四季游人如织。春天,湖畔桃花盛开,柳树垂下了它细长的枝条,任风梳理。各色的……
美丽的农博园今天是星期六,爸爸说要带我去莱芜的农博园,我开心极了!早上8点从家里出发,大约1个小时的路程就到了。一进农博园就被眼前的一切给吸引了,各式各样的植物,花草,简直是太美了。……
许愿瓶节发生的故事许愿瓶节是那个小镇的传统风俗。每到那一日,那天晚上天半黑半亮的时候,也就是傍晚的时候,镇里的人就会从家里那个小瓶子和一个绳子,集中在镇中间的一棵苍天大树下面,用随身带好的纸条用……
小学运动会作文400字汇编八篇在日常学习、工作和生活中,大家都跟作文打过交道吧,作文是经过人的思想考虑和语言组织,通过文字来表达一个主题意义的记叙方法。那么问题来了,到底应如何写一篇优秀的作文呢?以下是小编……
小米的性价比是可持续的吗?小米的电视销量也成为国内第一了,看了看价格,真的很难想象有55寸的液晶电视1500元,32寸的不到600元,电视机真的成了白菜价,这样玩,传统电视机厂家谁能干得过?我没用……
Instagram正式测试NFT,用户展示时将自带闪烁特效记者司林威5月10日,社交平台Instagram正式宣布进入NFT领域,美国的一部分创作者和收藏者将被允许测试NFT相关功能。该公司发布了一篇官方声明来介绍该功能。……
谷歌正式发布Android13更好玩更开放了标杆旗舰Pixe谷歌开发者大会如期进行,会上也是展示了最新的Android13系统和当家的旗舰手机,其都要在今年秋季正式推出,你期待吗?比较有趣的是,谷歌在大会上同步预告了新一代Pixe……
倒计时!搜狗地图将于5月15日正式下线5月11日,搜狗地图在官网表示,搜狗地图将于2022年5月15日23点正式下线,届时关闭所有相关服务。搜狗地图还建议用户下载腾讯地图。公开信息显示,搜狗地图成立于1999……
海康存储首款PCIeGen4。0固态硬盘C4000ECO正式近日,海康存储首款PCIeGen4。0固态硬盘C4000ECO正式上市,提供512GB和1TB两种容量规格,512GB标准版售价499元,1TB标准版售价799元。该款S……
留住记忆作文400字一晃6天过去了,告别了冲击,告别了军训,告别了我们可爱的教官,心中不舍。敬我们可爱温暖的军训时光昨日的点滴浮现在眼前,第一次军训生活就此结束,虽按常理来说本是很辛苦……
融资丨新氢动力完成数千万元A轮融资,容亿投资文华海汇投资创业邦获悉,近日,氢能工业车辆发动机系统研发生产商新氢动力宣布完成数千万元A轮融资,本轮融资由容亿投资、文华海汇投资。天津新氢动力科技有限公司正式成立于2019年11月,……
关心我的爸爸250字优秀作文我的爸爸是一名普通的。人民教师,他虽然表面对我冷冷淡淡,但内心却对我体贴入微。有一次,爸爸在外地办公,我半夜突然发起了高烧,住进了医院。爸爸得知后,便放下未完的公务坐飞机……
六年级数学日记范文300字冬冬,快去做张数学试卷!明天就要考试了,你还不紧不慢的,真不自觉。妈妈又唠叨了起来,我也只好惟命是从,乖乖地去做试卷了。我拿起笔,飞一般地写起了试卷,可做到了一题,我手中……
岁月苍茫品学网专稿未经允许不得转载岁月苍茫,弹指之间。一眼转过,望过去时光,几度苍茫。人虽有限。何为无限?方有一种精神屹立天地之间,……
雷锋精神代代传六年级日记如果你是一滴水,你是否滋润了一寸土地?如果你是一线阳光,你是否照亮了一分黑暗?如果你是一粒粮食,你是否哺育了有用的生命?如果你是一颗最小的螺丝钉,你是否永远坚守在你生活的岗位上……
写给妈妈的一封信亲爱的妈妈:您好!第一次月考的成绩出来了,我考得不算太好,数学95分,语文97分。考试前我还自信地向您保证会考上双百,现在您一定会感到很失望吧。当老师念到我的……
华为Mate50Pro规格曝光,确定发布时间最低6499!5由于众所周知的原因,华为已经接受了三轮的打击,这也导致了华为的手机业务严重下滑,所以余承东必须在接下来的时间里拿出一款更具说服力的产品,诸多的花粉也希望华为能够重新王者归来。前……
我的爸爸小学四年级作文550字我的爸爸有着健康的肤色,一头乌黑的头发,高高的个子,一双明亮的眼睛经常笑眯眯的,鼻梁上还戴着一副黑框眼镜。虽然岁月风尘让他的额头上长出了一条条的皱纹,可在我的眼里,他永远是那么……
菜鸟在京运力将向封控区和管控区一定倾斜,在封控区24小时配送【互联网早报】1、中国联通推出5G视频热线,打造可视化、智能化、定制化政企客服新体验2、菜鸟:在京运力将向封控区和管控区做一定倾斜,已在封控区推出24小时配送……
四年级作文游宜春明月山今年暑假,我和我的家人决定去国家森林地质公园明月山。时间一到我们就拿起行李,迫不及待地坐上我爸爸的车子室到丰城火车站。我们坐着火车去宜春,火车嘟嘟嘟地开走了,但是留下了一阵阵的……
一个注解优雅的实现循环重试功能在实际工作中,重处理是一个非常常见的场景,比如:发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通……
凌志软件一季度业绩平稳增长研发加码积蓄发展动能中证网讯(王珞)4月28日晚间,凌志软件(688588)发布2022年一季度报告。报告期内,公司实现营收1。6亿元,同比增长0。32;归母净利润3561。7万元,同比增长0。8……
桃花小学生作文400字锦集5篇在日常学习、工作或生活中,大家都尝试过写作文吧,作文是人们把记忆中所存储的有关知识、经验和思想用书面形式表达出来的记叙方式。为了让您在写作文时更加简单方便,下面是小编帮大家整理……
骄者必败作文700字在一年一度的森林运动会上,到处人山人海,热闹非凡。比赛还还开始,参加跑步比赛的动物们都在摩拳擦掌,跃跃欲试。比赛开始了,动物们使出了九牛二虎之力地往前跑,其中最引人注目的就是小……