RC4加密算法实践

加密算法简说

  加密其实并不是那么神秘,尝试后,加密应用起来也是很简单的,虽然自己一时想不到经典的加密算法出来。

  加密算法种类:

  • 对称加密:加密解密密钥相同;
  • 非对称加密:加密解密使用不同的密钥;

  常见加密算法:

  • RC4:对称算法、可变长密钥、对大量数据加密、速度快、明文长度不一;
  • DEC:对称算法、速度较快、对大量数据加密;
  • IDEA:对称算法、128位密钥;
  • RSA:非对称算法、公钥+密钥;

RC4加密算法实践

  对于RC4加密算法,密钥长度达到128位时,暴力破解基本很难破解了。下面是C++的实现:

encryptdecode.h
#ifndef __ENCRYPTDECODE_H__
#define __ENCRYPTDECODE_H__


#include<stdio.h>
#include<string.h>


class EncryptDecode{

private:
    void encrypt_decode_init(unsigned char *s,char *key,unsigned int keyLen);
    void encrypt_decode(unsigned char *s,unsigned char*Data,unsigned long textLen);
};
#endif
encryptdecode.cpp
#include "EncryptDecode.h"

void EncryptDecode::encrypt_decode_init(unsigned char*s,char*key,unsigned int keyLen)
{
    int i=0,j=0;
    char k[256]={0};
    unsigned char tmp=0;
    for(i=0;i<256;i++)
    {
        s[i]=i;
        k[i]=key[i%keyLen];
    }
    for(i=0;i<256;i++)
    {
        j=(j+s[i]+k[i])%256;
        tmp=s[i];
        s[i]=s[j];
        s[j]=tmp;
    }
}

void EncryptDecode::encrypt_decode(unsigned char*s,unsigned char*Data,unsigned long textLen)
{
    int i=0,j=0,t=0;
    unsigned long k=0;
    unsigned char tmp;
    for(k=0;k<textLen;k++)
    {
        i=(i+1)%256;
        j=(j+s[i])%256;
        tmp=s[i];
        s[i]=s[j];
        s[j]=tmp;        
        t=(s[i]+s[j])%256;
        Data[k] ^= s[t];
    }
}
main.cpp
#include "encryptdecode.h"
#include <stdio.h>

int main(int argc, char *argv[])
{
    unsigned char s_box[256] = "";
    unsigned char buf[512] = "这是一个RC4加密解密算法测试";
    char key[256] = "";

    int keylen = strlen(key);

    //加密
    encrypt_decode_init(s_box,key,keylen);
    encrypt_decode(s_box,buf,strlen(buf));
    printf("Encrypt:%s\n",buf);
    //解密(s_box在加密中已更改,需重新获得s_box)
    encrypt_decode_init(s_box,key,keylen);
    encrypt_decode(s_box,buf,strlen(buf));
    printf("Decode:%s\n",buf);

    return 0;
}

说明

  • 对不同长度的明文加密,则对这段明文解密时,需要获取这段明文的长度,否则解密不出来;
  • s_box加密后不再是原来的内容了,在加密前可以保存s_box的内容,或者重新初始化一次,解密时才能解密成功;
  • 可以知道影响解密成功的因素有明文的长度,比如对一个文件进行加密,将文件分为三段,每段的内容长度不一,则解密时需要依次知道这三段明文的长度;还有就是密钥的长度和内容都会影响解密;

你可能感兴趣的:(RC4加密算法,RC4加密解密,对称算法,可变密钥)