random(

作者: 丶Honour | 来源:发表于2017-10-31 15:21 被阅读0次

    今天项目中忽然想到这个问题,在这儿总结下.
    首先,随机数的大家都知道的,就不多说了,附上一个链接: http://blog.csdn.net/ouyangtianhan/article/details/17464149

    在文章中也提到 rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。
    这两个的使用方法如下

    srand((unsigned)time(NULL));
    RegMe.RanMe = rand() % 100;
    

    在这儿利用了时间种子。但是对应的当时间种子相同的时候,这个就会变得不安全,因为如果有人想破解你的代码,将srand((unsigned)time(NULL));
    改完srand(1);
    那么产生的随机数的序列将会是一样的,产生的随机数就是一样的。
    还有另一种方法就是,设法使时钟停止,可能也会产生上面的情况。 random()的产生的随机数比rand()范围大,但也是跟rand()同理的。

    因为遇到这种不安全随机函数,所以用了SecRandomCopyBytes产生一个256随机秘钥;
    Generates an array of cryptographically secure random bytes.
    生成一组密码安全的随机数。
    一个数:

    uint8_t a = 0;
    int returnValue = SecRandomCopyBytes(kSecRandomDefault, 1, &a);
    

    多个数

    uint8_t a[2];
    int returnValue = SecRandomCopyBytes(kSecRandomDefault, 2, a);
    

    我是这么使用的:

    u_int32_t a;
     int returnValue = SecRandomCopyBytes(kSecRandomDefault, sizeof(u_int32_t), &a);
    

    因为要替换的是random()的函数,所以使用的是u_int32_t,生成的a就是随机数了。所以在项目中尽量避免使用random()、srandom()。Over。

    喜欢的可以给个爱心❤️哦,谢了。。

    相关文章

      网友评论

          本文标题: random(

          本文链接:https://www.haomeiwen.com/subject/sndbpxtx.html