RC 4暗号化アルゴリズムの実践
5689 ワード
暗号化アルゴリズムの説明
暗号化は実はそんなに神秘的ではありません.試みた後、暗号化を適用するのも簡単です.
_; 暗号化アルゴリズムの種類:対称暗号化:暗号解読鍵は同じである. 非対称暗号化:暗号解読は異なる鍵を使用する. _; 共通暗号化アルゴリズム: RC 4:対称アルゴリズム、可変長鍵、大量のデータの暗号化、速度が速く、明文の長さが異なる. DEC:対称アルゴリズム、速度が速く、大量のデータを暗号化する. IDEA:対称アルゴリズム、128ビット鍵. RSA:非対称アルゴリズム、公開鍵+鍵. RC 4暗号化アルゴリズムの実践
RC 4暗号化アルゴリズムに対して、鍵長が128ビットに達すると、暴力解読は基本的に難しくなります.以下はC++の実装です.は異なる長さの平文を暗号化すると、この明文を復号する際に、この明文の長さを取得する必要があります.そうでなければ復号できません. s_boxを暗号化したら元の内容ではなく、暗号化する前にs_を保存できます.boxの内容は、または再初期化され、解読に成功します. は、暗号化の成功に影響を与える要素の長さを知ることができ、例えば、1つのファイルを暗号化し、3つのセグメントに分割し、各セグメントのコンテンツの長さが異なる場合、その3つの文の長さを順次知る必要がある.また、鍵の長さと内容は復号に影響を及ぼします.
暗号化は実はそんなに神秘的ではありません.試みた後、暗号化を適用するのも簡単です.
_; 暗号化アルゴリズムの種類:
RC 4暗号化アルゴリズムに対して、鍵長が128ビットに達すると、暴力解読は基本的に難しくなります.以下はC++の実装です.
encryptdecode.h
#ifndef __ENCRYPTDECODE_H__
#define __ENCRYPTDECODE_H__
#include
#include
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;k1)%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
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
",buf);
// (s_box , s_box)
encrypt_decode_init(s_box,key,keylen);
encrypt_decode(s_box,buf,strlen(buf));
printf("Decode:%s
",buf);
return 0;
}
説明