随机数发生程序

32位随机数生成

#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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值