首页
社区
课程
招聘
[原创]随机函数改造的示例
2015-9-1 16:36 4264

[原创]随机函数改造的示例

2015-9-1 16:36
4264
  这里用C语言中的随机函数 rand()来建造新函数randb(),种子函数没有单写,仍用rand()的srand(整数)即可,完整的种子函数应该除了处理srand(整数)外还要处理一下ss[]数组,给它一个你所希望的初值。
  randb()的输出是字节数组,你可以根据需要组合成任何数据形式。
  新函数虽然来自rand(),这个最简单的随机函数,但性能却有飞跃式的改进。若使用MT19973那样的东西就更厉害了。

int randb(void);                //函数声明

int K=0;                        //函数所用到的全局变量或数组
static long SeedB=1;
unsigned char ss[256] ={
0x8e,0xb7,0x5c,0x5f,0x4e,0xf1,0xeb,0xc5,0x96,0xa6,0x98,0xba,0x56,0x1b,0x4b,0xca,
0xf8,0xa1,0x0a,0x91,0xed,0x7c,0xea,0xf3,0x3f,0x50,0xc3,0x63,0xe7,0x81,0x8a,0x89,
0xfa,0xd3,0x5b,0x51,0xe4,0x2e,0x9a,0x47,0xd4,0x3e,0x2b,0x59,0x43,0x78,0xaf,0x6a,
0x2c,0x10,0xc0,0x97,0xa7,0x00,0x1f,0x55,0x1c,0x21,0x49,0x58,0xa0,0xa4,0xb8,0xc2,
0xd2,0x0e,0x13,0x40,0xb6,0x86,0x69,0xfd,0xde,0x99,0x57,0x76,0xee,0xc9,0x92,0x4d,
0xb1,0x01,0xa8,0xd1,0x39,0x02,0x4c,0x9e,0xe6,0x22,0xdd,0x05,0x08,0xdf,0xfb,0xdc,
0x75,0xc6,0xd8,0x7a,0xcc,0x8d,0x37,0x70,0x8c,0x72,0x32,0x6c,0xa9,0xe8,0xff,0x45,
0x6f,0x30,0x7b,0x80,0x6b,0x62,0xd0,0xec,0x9b,0x61,0xb9,0x52,0x93,0x5e,0x65,0xad,
0x74,0xb4,0xfc,0x53,0xe1,0x06,0xbd,0x41,0xcb,0x7f,0x36,0x25,0x35,0x3a,0xd5,0xb2,
0x46,0x77,0x54,0x73,0xf6,0x85,0x28,0xf0,0x26,0xb3,0x6e,0xac,0xf4,0x2f,0x87,0x6d,
0xe2,0x90,0x88,0xce,0x71,0xcd,0x9c,0x09,0x18,0x9f,0xf2,0x4f,0x1d,0x60,0x2a,0x12,
0x03,0xc7,0xa2,0x0d,0xd7,0xbb,0xd9,0x17,0x33,0x19,0x82,0xbf,0x9d,0xf7,0xc4,0x34,
0x4a,0x1a,0x94,0xef,0x7d,0x3b,0x48,0xc1,0x7e,0x24,0x15,0x5a,0x3d,0xdb,0x0f,0x8f,
0xc8,0x0b,0xaa,0x83,0x29,0x38,0x5d,0xe3,0x14,0x67,0xa5,0x23,0xbe,0x0c,0x3c,0xf5,
0x11,0xe5,0xab,0x79,0xda,0x8b,0xe9,0x44,0x1e,0xa3,0x31,0x95,0x84,0xe0,0xb5,0x66,
0xbc,0xf9,0xcf,0x42,0xfe,0x2d,0x68,0xae,0x64,0xb0,0x04,0x07,0x16,0xd6,0x20,0x27
};

int randb(void)                        //新随机函数实体
{
int i;
unsigned char ch;
unsigned int n1=0;

        if((K>=255)||(K==0))
        {
                for(i=0;i<256;i++)        //单元串随机排序
                {
                n1=(i+rand())%256;
                ch=ss[i];
                ss[i]=ss[n1];
                ss[n1]=ch;
                }
                K=0;
        }

        SeedB = (int)ss[rand()%256];
        K++;
        return SeedB;
}

[培训]科锐软件逆向50期预科班报名即将截止,速来!!! 50期正式班报名火爆招生中!!!

收藏
免费 0
打赏
分享
最新回复 (4)
雪    币: 18
活跃值: (999)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
猪会被杀掉 1 2015-9-1 18:28
2
0
........那么麻烦,直接openssl里面的随机函数生成就完事了,还包含很多密码学.
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2015-9-1 19:15
3
0
据说openssl是打发要饭的货色,里面能有好东西吗?
雪    币: 8180
活跃值: (2687)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
layerfsd 4 2015-9-1 20:20
4
0
随机数的本质是“随机”,而不是所谓的性能吧。你这个连最基本的rand就是个伪随机,就是本质上在绕圈了。
雪    币: 10014
活跃值: (2012)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
sjdkx 2015-9-1 22:33
5
0
rand()在randb()里只是起到拣选元素的作用,它的数值并没有直接参与,请楼上看仔细些!也就是它的作用只是在重新排列原始数组。
游客
登录 | 注册 方可回帖
返回