案情背景

  目前公司做新项目,基本所有新项目都是用.net core来做,旧项目一半还是基于 .net framework下面,一半已经迁移到了core平台。在做新项目的时候,有个功能需要对接到旧项目那边的接口,功能也不复杂,就是对接接口的参数需要通过签名,然后进行MD5加密传输过去,旧项目那边也有相同的签名和加密方式,用来检验参数的正确性,听起来其实就是一种很简单传统的签名验证方式,却因为 “.net core 和 .net framework 下面编码不同” 导致走了很多弯路
在传参过程中,一直收到旧项目接口返回的“签名错误”的提示,刚开始以为是两者对应的签名方法不一致,但经过同事确认,签名方法是直接复制过来的,绝对没错(虽然我还是不信ㄟ( ▔, ▔ )ㄏ),为了证明他的结论是错的,我毅然在 .net framework下面建了个项目,然后同样的代码copy过去,当我run起来后,心里本来想可以美滋滋的过去扇他一嘴巴子。结果签名通过了,接口调用成功,这让我很是惆怅啊.........

肇事方法

  回头整理下,整个过程中,排除了业务方法后,最终最只有这个MD5加密的方法

     /// <summary>
     /// MD5加密
     /// </summary>
     /// <param name="password"></param>
     /// <returns></returns>
     public static string MD5Encrypt(string context)
     {
         var bytes = Encoding.Default.GetBytes(context);
         var md5Str = MD5.Create().ComputeHash(bytes);
         return BitConverter.ToString(md5Str).Replace("-", "");
     }

然后我把这个方法单独拿出来在两个平台上测试,发现结果确实不一样,心里莫名有种兴奋感,接下来定位到 Encoding.Default.GetBytes 这个方法,于是再测试了一次

这是.net core下面的结果

这是.net framework下面的结果

寻找真相

  发现到这里,我的第一反应其实是这样的

  接下来,百度和stackoverflow查一下,找不到答案,问了几个群,也没人遇到过。然后拿出了杀手锏,我亲爱的谷歌,可能提问方式不对,愣是找不到答案。最后,没办法了,是时候发挥一个程序员的精神了,咱自己看下源码吧,方正.net都是开源的。

第一步,看下.net core下面 Encoding.Default 这个对象的源码

  可以看到,.net core下面 Encoding.Default 默认就是获取了UTF8Encoding这个编码的

第二步,看下.net core下面 .net framework这个对象的源码

  可以看到,.net framework 是也有UTF8Encoding这个编码的,但是确是需要当  代码页标识符 为65001的时候才会命中(65001具体表示什么,等下再说到),这样看,难道是他们两个默认的 代码页标识符 不一样,瞬间感觉离真相越来越近了

第三步,看下他们的默认CodePage

.net framework

.net core

soga~~~果然不一样,于是查了下96365001对应的编码类型

  这下就清晰了,虽然同样都是用 Encoding.Default 的方法,但是由于.net framework 下面默认的是963(GB2312)的,.net core 下面是65001(UTF-8)的,所以才会导致相当的方法,跑出了不同的结果。

解决问题  

  知道原因了就好办了,由于旧系统的接口之前也会其他系统在对接,所以旧系统那边的签名是改不了的,只能改新的这边,于是只要在.net core 把 Encoding.Default 改作 Encoding.GetEncoding(“GB2312”),统一编码就可以了,然后兴高采烈的run起来,结果居然报错了,又一次被尴尬到,原来是.NET Core默认不支持GB2312了,所以需要在Starup.cs的Configure方法中加入Encoding.RegisterProvider(CodePagesEncodingProvider.Instance),就这样妥妥的跑稳了。

 

  

 

  好了,感觉是不是有点标题党,哈哈,其实就是想和大家分享下,也希望大家在.net core 上面遇到的问题也能分享下,可能只是个细节的问题,同样能帮助别人少才坑。

  然后顺便跟还在用.net framework的朋友说下,可以 稳稳地转.net core 了,我已经两年没写过文章了,这两年来一直在学,在用.net core ,在生产环境中已经稳稳的跑过.net core了,而且是在docker里面,而且是在k8s里面(当然linux和window上的就更不用说了)

posted @ 2019-04-05 01:15 最爱晴天 阅读(1034) 评论(1) 推荐(0) 编辑
摘要: 浅谈orm 记得四年前在学校第一次接触到 Ling to Sql,那时候瞬间发现不用手写sql语句是多么的方便,后面慢慢的接触了许多orm框架,像 EF,Dapper,Hibernate,ServiceStack.OrmLite 等。当然每种orm都有各自的优势,也有不足的地方。园子里也有很多大神开 阅读全文
posted @ 2017-06-04 22:25 最爱晴天 阅读(15849) 评论(46) 推荐(68) 编辑
摘要: Redis监控 Redis 是目前应用广泛的NoSQL,我做的项目中大部分都是与Redis打交道,发现身边的朋友也更多人在用,相对于memcached 来说,它的优势也确实是可圈可点。在随着业务,数据量等不断的扩大后,对Redis的稳定性,性能等也更在的重视,之前就遇到过Redis导致服务器内存不足 阅读全文
posted @ 2017-01-12 22:58 最爱晴天 阅读(11764) 评论(23) 推荐(51) 编辑
摘要: 之前由于项目需要,中间需要一个汉字转拼音和首拼的功能来做查询,感觉这种功能基本已经成熟化了,于是查找了相关的代码,首先引入眼帘的是下面两篇文章 1.C# 汉字转拼音(支持GB2312字符集中所有汉字) 2.【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法 感谢两位博主,写的比较全也很详细 阅读全文
posted @ 2016-12-18 21:36 最爱晴天 阅读(28469) 评论(22) 推荐(28) 编辑
摘要: 前两天朋友问我,有没有使用过StackExchange.Redis,问我要个封装类,由于之前都是使用ServiceStack.Redis,由于ServiceStack.Redis v4版本后是收费版的,所以现在也很有公司都在使用StackExchange.Redis而抛弃ServiceStack.R 阅读全文
posted @ 2016-10-11 23:31 最爱晴天 阅读(24361) 评论(81) 推荐(79) 编辑
摘要: 年后回来,跟之前和几个同事和朋友聊天,发现有两个.net的和一个php的朋友都转到了前端,真是出乎意料。自从之前的webapp兴起后,前端感觉比后端吃香很多,总结朋友们转的原因,大概就几点 1.易上手,相对其他语言来说,作为后端人员,转到前端,其实已经有了很好的底子和基础了,毕竟以前多少都会和js, 阅读全文
posted @ 2016-03-13 04:04 最爱晴天 阅读(70698) 评论(39) 推荐(38) 编辑
摘要: 迟来的年后总结 其实很多时候都想写两篇博客来记录下工作学习中的点点滴滴,不过自从去年10月份后,工作上总是无比的忙,新功能,新项目,需求不明确,需求变动等原因导致在后期长时间的加班和赶工。不过庆幸2015终归拉下了帷幕。在2015年中虽然累,虽然有段时间无比苦逼,不过也算是学了很多,如 技术上的突破 阅读全文
posted @ 2016-02-16 01:11 最爱晴天 阅读(4735) 评论(24) 推荐(7) 编辑
摘要: 日前从公司离职,很快,还没休息就步入了现在的公司,开始跟着公司的脚步走。 公司的项目基本都是大数据的,所以在数据库上大部分都是使用Mongodb和Redis,基本都是Nosql型的数据库为主。以前自己学着做过Mongodb和Redis的Demo,大体知道其怎么去运用,只是没有一个规范化... 阅读全文
posted @ 2015-08-09 14:29 最爱晴天 阅读(3070) 评论(16) 推荐(6) 编辑
摘要: 导火线晚上跟高中同学说我近来的状况,无意中他提到:“如果当初没意外话,今年估计你就是一名老师了吧”。这让我很是怀念以前的日子,这四年来过的很快,开始想着当初是怎么过来的:高考 本人英语不佳,高考只能靠理综和数学撑着,那时候刚好上了2A线,纯属于2A尾,不过也罢,人嘛,努力了就好。到了开始填志愿了,... 阅读全文
posted @ 2015-07-22 00:23 最爱晴天 阅读(1319) 评论(16) 推荐(2) 编辑
摘要: 近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~)。用来用去都觉的有一定的不爽。这次打算用Dapper这个ORM来做项目看看。首先感谢http://www.cnblo... 阅读全文
posted @ 2015-02-08 17:35 最爱晴天 阅读(13286) 评论(22) 推荐(14) 编辑

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示