Duede
V2EX  ›  C

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

  •  
  •   Duede · Mar 29, 2015 via Android · 3150 views
    This topic created in 4249 days ago, the information mentioned may be changed or developed.
    想来想去还是不会做 求提示 谢谢
    21 replies  •  2015-04-01 21:52:00 +08:00
    Septembers
    Septembers
    Mar 29, 2015
    1
    OpenSSL
    linux40
    linux40
    Mar 29, 2015 via Android
    2
    cstdlib伪随机算不算。。。
    tobyxdd
    tobyxdd
    Mar 29, 2015 via Android
    3
    你是要自己写算法还是只要实现
    Landarky
    Landarky
    Mar 29, 2015
    4
    一般都是通过时间处理
    auser
    auser
    Mar 29, 2015 via Android❤️1
    6
    c加加11 标准库自带 随机数生成器和分布
    em70
    em70
    Mar 29, 2015 via Android
    7
    取时间做余弦
    zhicheng
    zhicheng
    Mar 29, 2015 via Android
    8
    /dev/urandom
    jokester
    jokester
    Mar 29, 2015
    9
    单这个功能很难叫软件..叫程序比较好
    ming2050
    ming2050
    Mar 29, 2015 via Android❤️1
    10
    伪随机数,貌似就一条语句就可以。如果是随机数就有点麻烦。
    dacapoday
    dacapoday
    Mar 29, 2015
    12
    一种伪随机数,要验证随机程度,可以用随机数生成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
    ryd994
    Mar 29, 2015 via Android
    13
    @dacapoday 模式识别到底还是人眼高效
    nbndco
    nbndco
    Mar 29, 2015 via iPhone
    14
    @dacapoday 这样没用的,图片看起来随机实际上完全不随机的例子太多了
    dacapoday
    dacapoday
    Mar 29, 2015
    15
    @nbndco 所以是伪随机,毕竟有公式可循,我上面_转_的程序就是MD4,将顺序的数字,时间戳,变成乱码。只要不是用于加密,够用了。出图这方法确实是歪门邪道,但连图片都是充满水波纹或锯齿,就肯定不随机,出图只是直观了解一下而已
    mN71eOOprFyMsnPx
    mN71eOOprFyMsnPx
    Mar 30, 2015
    18
    伪随机数

    #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
    yorTX9t
    Mar 30, 2015
    19
    N 年前写的,可以生成六十几种伪随机数分布, C++: https://github.com/fengwang/random_variate_generator
    liufuyi
    liufuyi
    Mar 31, 2015
    20
    这是要生成比特币私钥么?
    Duede
    Duede
    OP
    Apr 1, 2015 via Android
    21
    @mringg 随机数 不是伪随机
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1784 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3fe30769 · 55ms · UTC 01:05 · PVG 09:05 · LAX 17:05 · JFK 20:05
    ♥ Do have faith in what you're doing.