RC4加密算法实践

来源:互联网 发布:sas软件的数据结构 编辑:程序博客网 时间:2024/06/06 20:17

加密算法简说

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

  加密算法种类:

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

  常见加密算法:

  • 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的内容,或者重新初始化一次,解密时才能解密成功;
  • 可以知道影响解密成功的因素有明文的长度,比如对一个文件进行加密,将文件分为三段,每段的内容长度不一,则解密时需要依次知道这三段明文的长度;还有就是密钥的长度和内容都会影响解密;
0 0
原创粉丝点击