0
回答
随机数发生程序
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

#include <memory.h>
#define DWORD unsigned long

DWORD MCoef_32[2]={0xE7BD2160,0xDA3A2A9C};
// 两个小m序列系数


DWORD m_Seq_32_m(DWORD dwMset,DWORD dwKey,int nNumber, DWORD * pdwRandom)
// dwMset: 随机发生器所使用的小m序列

// dwKey: 随机数种子

// nNumber: 产生的随机序列长度(以DWORD为单位)

// pdwRandom: 指向随机数存储空间的指针

// return value: 运算完成之后随机数发生器的状态

{
    _asm
    {
        CLD
        MOV EDI,pdwRandom;
        MOV ECX,nNumber;
        MOV ESI,dwMset;
        MOV EAX,dwKey;
        ALIGN 4
LOOP_CIRCLE1:
        PUSH ECX
        MOV ECX,32
LOOP_CIRCLE2:
        MOV EBX,EAX;
        SHL EAX,1
        AND EBX,ESI; //select the bit for xor

        MOV EDX,EBX;
        BSWAP EBX;
        XOR BX,DX;
        XOR BH,BL; // because P only judge one byte

        // so must XOR to judge the p of whole word

        JP NEXT //jp equals the xor

        INC EAX
NEXT: 
        DEC ecx
        JNZ LOOP_CIRCLE2
        POP ECX
        STOSD
        DEC ECX
        JNZ LOOP_CIRCLE1
        MOV dwKey,EAX
    }
    return dwKey;
}

void RandomGenerator(void * Buffer, int nlength)
// 产生长度为nLength字节的随机数

// Buffer: 指向随机数存放区域的指针

// nLength: 产生随机数数量

{
    DWORD A;
    BYTE B[4];
    _asm
    {
        _emit 0x0f
        _emit 0x31
        MOV A,EAX
    }
    A=m_Seq_32_m(MCoef_32[0],A,nLength/4,(DWORD *)Buffer);
    if(nLength%4!=0)
    {
        m_Seq_32_m(MCoef_32[0],A,1,(DWORD *)B);
        memcpy(Buffer+(nLength/4)*4,B,nLength%4);
    }
    return;
}


原文链接:http://blog.csdn.net/favormm/article/details/5707966
<无标签>
举报
长平狐
发帖于5年前 0回/83阅
顶部