首页
社区
课程
招聘
[原创]乱排随机函数源码举例
2014-12-24 15:39 4153

[原创]乱排随机函数源码举例

2014-12-24 15:39
4153
  在“新型随机函数”帖中介绍了乱排随机函数。
  乱排随机函数是一种新型随机函数,它的最大特点是生成的数组之间没有关联,这是以往随机函数所欠缺的。但它仍然是可以用种子来控制的随机函数,如果将种子销毁其输出结果可以媲美真随机数组,作为信息加密密钥是可以胜任的。
  下面给出一个“乱排随机函数”的实例。其中用到的随机函数是C语言中那个简单的rand()。用性能更好的随机函数取代rand()你可以做出更厉害的“乱排随机函数”。

//乱排随机函数声明及变量
unsigned char SJHS(void);        //乱排随机函数
void SJHS_CSH(unsigned int x);        //乱排随机函数的初始化函数(种子设置函数)
//随机函数专用变量
unsigned char A_[1024+1]={0};
int B_1=-1;                        //输出指针       

//所用到的随机函数randa()的声明变量及函数实体
#define MUL 0x015a4e35L
#define INC 1
static long Seed=1;
void sranda(long seed);
unsigned int randa(void);

void sranda(long seed)
{
        Seed=seed;
}
unsigned int randa(void)
{
        Seed=MUL*Seed+INC;
        return((unsigned int)(Seed>>24));
}

//乱排随机函数的初始化函数实体
void SJHS_CSH(unsigned int x)
{
int n1=101,i;
unsigned char ch;
                for(i=0;i<1024;i++)        //随机排序
                {A_[i]=i%256;}                //赋初值

        sranda(x);                        //设置用到的随机函数种子

                for(i=0;i<1024;i++)        //随机排序
                {
                n1=(n1 + A_[n1] + i + A_[i] + randa())%1024;
                ch=A_[i];
                A_[i]=A_[n1];
                A_[n1]=ch;
                }
}

//乱排随机函数实体
unsigned char SJHS(void)
{
int i;
int n1=127;
unsigned char ch;

        if(B_1==0)
        {
                for(i=0;i<1024;i++)                                                //随机排序 更新数组
                {
                n1=(n1 + A_[n1] + i + A_[i])%1024;
//                n1=(i + randa())%1024;                //randa()参与
                ch=A_[i];
                A_[i]=A_[n1];
                A_[n1]=ch;
                }
        B_1=1023;                                                                        //改变指针
        }
        else
        {
        B_1--;
        }

        return A_[B_1];
}

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
打赏
分享
最新回复 (1)
雪    币: 719
活跃值: (782)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
落笔飞花 1 2014-12-24 15:44
2
0
前排帮顶
游客
登录 | 注册 方可回帖
返回