JeffreySu / WeiXinMPSDK

微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 8.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 WeChat SDK for C#.
https://weixin.senparc.com
Apache License 2.0
8.43k stars 4.35k forks source link

TenPayUtil 下的 BuildRandomStr 方法,连续调用返回随机数一样 #564

Closed hetaoos closed 7 years ago

hetaoos commented 7 years ago

( 此版块专为反馈bug及提交需求服务,不负责解答开发问题,请勿发表开发问题, 如果您需要这方面的帮助,请移步问答社区http://weixin.senparc.com/QA )

问题描述

Random 的用法是错了,你们这样用,将使用系统时间戳作为随机种子,连续调用时,随机种子是一样的,所以产生的随机数也是一样的。

正确的用法是,定义一个class级别的静态 Random, 每次调用的时候 lock 下。 如:

        public class RandomTest
        {
            private static Random rnd = new Random();

            public string Fun()
            {
                int i;
                lock (rnd)
                    i = rnd.Next(100);

                //do something
            }
        }

GetNoncestr() 这个方法写得也挺差的,只有1000种情况。 用 Random 的 NextBytes 可以产生指定个随机字节。

发现问题的模块
模块对应的.net版本
开发环境
缓存环境
JeffreySu commented 7 years ago

对的,这个类是腾讯提供的,还没注意到这个问题,谢谢反馈!

如果您这边已经有修改好的代码欢迎Pull Request,成为我们Contributor。

JeffreySu commented 7 years ago

已经发布了。