今天項目中忽然想到這個問題,在這兒總結下.
首先,隨機數的大家都知道的,就不多說了,附上一個鏈接: http://blog.csdn.net/ouyangtianhan/article/details/17464149
在文章中也提到 rand()和random()實際并不是一個真正的偽隨機數發(fā)生器瞧捌,在使用之前需要先初始化隨機種子黍檩,否則每次生成的隨機數一樣。
這兩個的使用方法如下
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。
喜歡的可以給個愛心??哦捺氢,謝了藻丢。。