c++制作产生随机数的软件

2015-03-29 08:06:03 +08:00
 BGYL
想来想去还是不会做 求提示 谢谢
2065 次点击
所在节点    C
21 条回复
Septembers
2015-03-29 08:08:05 +08:00
OpenSSL
linux40
2015-03-29 08:39:19 +08:00
cstdlib伪随机算不算。。。
tobyxdd
2015-03-29 08:41:43 +08:00
你是要自己写算法还是只要实现
Landarky
2015-03-29 09:09:17 +08:00
一般都是通过时间处理
Septembers
2015-03-29 09:25:15 +08:00
auser
2015-03-29 10:08:06 +08:00
c加加11 标准库自带 随机数生成器和分布
em70
2015-03-29 10:15:58 +08:00
取时间做余弦
zhicheng
2015-03-29 10:33:28 +08:00
/dev/urandom
jokester
2015-03-29 11:37:59 +08:00
单这个功能很难叫软件..叫程序比较好
mringg
2015-03-29 13:09:49 +08:00
伪随机数,貌似就一条语句就可以。如果是随机数就有点麻烦。
billlee
2015-03-29 13:45:29 +08:00
dacapoday
2015-03-29 14:58:26 +08:00
一种伪随机数,要验证随机程度,可以用随机数生成RGB颜色出图片,越像雪花无规律越随机
<code>
uint32_t
RandomSeed(void)
{
uint32_t ui32A, ui32B, ui32C, ui32D, ui32Temp, ui32Idx;

//
// Initialize the digest.
//
ui32A = 0x67452301;
ui32B = 0xefcdab89;
ui32C = 0x98badcfe;
ui32D = 0x10325476;

//
// Perform the first round of operations.
//
#define F(a, b, c, d, k, s) \
{ \
ui32Temp = a + (d ^ (b & (c ^ d))) + g_pui32RandomEntropy[k]; \
a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \
}
for(ui32Idx = 0; ui32Idx < 16; ui32Idx += 4)
{
F(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3);
F(ui32D, ui32A, ui32B, ui32C, ui32Idx + 1, 7);
F(ui32C, ui32D, ui32A, ui32B, ui32Idx + 2, 11);
F(ui32B, ui32C, ui32D, ui32A, ui32Idx + 3, 19);
}

//
// Perform the second round of operations.
//
#define G(a, b, c, d, k, s) \
{ \
ui32Temp = (a + ((b & c) | (b & d) | (c & d)) + \
g_pui32RandomEntropy[k] + 0x5a827999); \
a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \
}
for(ui32Idx = 0; ui32Idx < 4; ui32Idx++)
{
G(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3);
G(ui32D, ui32A, ui32B, ui32C, ui32Idx + 4, 5);
G(ui32C, ui32D, ui32A, ui32B, ui32Idx + 8, 9);
G(ui32B, ui32C, ui32D, ui32A, ui32Idx + 12, 13);
}

//
// Perform the third round of operations.
//
#define H(a, b, c, d, k, s) \
{ \
ui32Temp = a + (b ^ c ^ d) + g_pui32RandomEntropy[k] + 0x6ed9eba1; \
a = (ui32Temp << s) | (ui32Temp >> (32 - s)); \
}
for(ui32Idx = 0; ui32Idx < 4; ui32Idx += 2)
{
H(ui32A, ui32B, ui32C, ui32D, ui32Idx + 0, 3);
H(ui32D, ui32A, ui32B, ui32C, ui32Idx + 8, 9);
H(ui32C, ui32D, ui32A, ui32B, ui32Idx + 4, 11);
H(ui32B, ui32C, ui32D, ui32A, ui32Idx + 12, 15);

if(ui32Idx == 2)
{
ui32Idx -= 3;
}
}

//
// Use the first word of the resulting digest as the random number seed.
//
return(ui32A + 0x67452301);
}
</code>
ryd994
2015-03-29 15:28:31 +08:00
@dacapoday 模式识别到底还是人眼高效
nbndco
2015-03-29 15:48:33 +08:00
@dacapoday 这样没用的,图片看起来随机实际上完全不随机的例子太多了
dacapoday
2015-03-29 16:11:18 +08:00
@nbndco 所以是伪随机,毕竟有公式可循,我上面_转_的程序就是MD4,将顺序的数字,时间戳,变成乱码。只要不是用于加密,够用了。出图这方法确实是歪门邪道,但连图片都是充满水波纹或锯齿,就肯定不随机,出图只是直观了解一下而已
wanghanlin
2015-03-29 20:34:39 +08:00
jiashan
2015-03-29 20:35:10 +08:00
FifiLyu
2015-03-30 10:37:00 +08:00
伪随机数

#ifdef _WIN32
int64_t get_random() {
LARGE_INTEGER large_interger_;
QueryPerformanceCounter(&large_interger_);
int64_t utime_ = large_interger_.QuadPart;
return utime_;
}
#else
/* 获取随机数
* 由于是根据时间(单位:纳秒)来生成,所以重复的几率非常小。
* 来源:linux until 中uuid源代码:gen_uuid.c
*/
int64_t get_random() {
struct timeval tv;
int32_t ret = 0;

gettimeofday(&tv, 0);
srand(tv.tv_sec ^ tv.tv_usec);

/* Crank the random number generator a few times */
gettimeofday(&tv, 0);

for (int32_t i = (tv.tv_sec ^ tv.tv_usec) & 0x1F; i > 0; i--) {
ret = rand();
}

return ret;
}
#endif
yorTX9t
2015-03-30 22:50:20 +08:00
N 年前写的,可以生成六十几种伪随机数分布, C++: https://github.com/fengwang/random_variate_generator
liufuyi
2015-03-31 09:39:13 +08:00
这是要生成比特币私钥么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/180053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX