加密算法简说
??加密其实并不是那么神秘,尝试后,加密应用起来也是很简单的,虽然自己一时想不到经典的加密算法出来。
??加密算法种类:
- 对称加密:加密解密密钥相同;
- 非对称加密:加密解密使用不同的密钥;
??常见加密算法:
- 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的内容,或者重新初始化一次,解密时才能解密成功;
- 可以知道影响解密成功的因素有明文的长度,比如对一个文件进行加密,将文件分为三段,每段的内容长度不一,则解密时需要依次知道这三段明文的长度;还有就是密钥的长度和内容都会影响解密;
版权声明:本文为博主[原创]文章,未经博主允许可以转载,注明博客出处:[http://blog.csdn.net/FreeApe]
时间: 2024-07-30 20:30:45