【签名之坑】Decmail.GetBits()

时间:2021-06-26 04:43:30

decimal类型有GetBits()方法

可以获取到值的int[4]值,进而获取到byte[16]值

在c#里,0m和0.00m获取到的byte[]是不一样的(具体为何不一样,自己百度)

在sql里,EF生成的decimal的列,默认强制2位小数

c#里赋值0m,存到数据库变成0.00m

那么问题来了

如果有用到decimal.GetBits()的值作为要签名的内容

那么存到数据库后再取出来,验证签名就会失败

为了应对这种问题,需要在存进数据库前,强制把decimal转为2位小数

在赋值语句里连着“+0.01m-0.01m”,例如item.Credit = value + 0.01m - 0.01m;

这样就能解决这个问题了……