密码学是网络空间安全学科里面比较博大精深的一个方向,不管是从事网安方向研究或者工作的朋友们,大家一定绕不开实现各种密码算法(当然,现在python通过Crypto库实现各种常见分组密码/公钥密码的方法十分简洁)。我们选择C语言实现密码算法,一方面自然因为C语言具有良好的底层相容性,可以方便地部署到DSP等芯片上;另一方面呢,C语言的速度是毋庸置疑的,作为今天效率至上的互联网通信技术,最不能容忍的就是龟速一样的上下行速度了,因此在保证安全的前提下,能尽可能快地实现加密传输,那自然是最好不过啦~

 废话少说,直接上代码

typedef unsigned char u8;
int rc4_enc(u8 *out, u8 *in, int len, u8 *key,int key_len)
{
    int i,k;
    u8 state[256],key_data[256];
    u8 x,y,z;
    memset(key_data,0,256*sizeof(u8));
    for(i=0;i<256;i++)
    {
        state[i]=i;
    }
    x=0;
    for(i=0;i<256;i++)
    {for(k=0;(k<key_len)&&(i<256);i++,k++)
        {
            x=key[k]+state[i]+x;
            y=state[i];
            state[i]=state[x];
            state[x]=y;
        }
    }
    x=0;y=0;
    for(i=0;i<len;i++)
    {
        x++;
        y+=state[x];
        z=state[x];
        state[x]=state[y];
        state[y]=z;
        out[i]=in[i]^state[(state[x]+state[y])&0xff];
    }
    return 1;
}

 RC4序列密码简介

       RC4(Rivest Cipher 4)是由美国密码学家Ronald Rivest为RSA安全公司在1987年设计的一种流加密算法。RC4算法由伪随机数生成器和异或运算组成。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒(一个256长度的char型数组,每个单元都是一个字节,包含0~255的8比特数的排列组合)。S盒用来加密数据,而且在加密过程中S盒会变化。在加密过程中,每收到一个字节的明文,就通过一定的算法定位S盒中的一个元素,并与该字节异或,得到密文的一个字节。同时,S盒的内容也会发生变化。解密过程与加密过程类似,只是输入的是密文,输出的是明文。

RC4密码的一些思考

       目前,RC4在应用层面已经从SSL/TLS协议中踢掉了(当然害得是我们的AES重量级系列密码安全性高)。但这并不意味着RC4没有在现实中应用的地方,在一些安全技术较为落后、安防基础薄弱的组织中,一些看起来已经淘汰的密码仍在使用着,作为安全从业的一员,我们其实需要认真把这些被淘汰的算法拿来仔细分析,为什么被淘汰?是什么让它们不再安全?将来还有谁会被替换?我们怎么去修改它们?举一反三,这些思考对我们研究工作都是意义非凡的!


更多推荐