www.pudn.com > endecipher.rar > Idea.h
// Idea.h: interface for the CIdea class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_IDEA_H__61B38200_0CC8_4FBF_9055_B3591B5F4EDD__INCLUDED_)
#define AFX_IDEA_H__61B38200_0CC8_4FBF_9055_B3591B5F4EDD__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef BLOCKSIZE
#define BLOCKSIZE 4
#endif
#ifndef ROUND
#define ROUND 8
#endif
#ifndef KEYSIZE
#define KEYSIZE 6
#endif
#ifndef CARDINALITY
#define CARDINALITY 65536
#endif
#ifndef SHIFTLEFT
#define SHIFTLEFT 25
#endif
typedef unsigned short int WORD;
typedef unsigned int DOWORD;
class CIdea
{
private:
WORD wKeySeed[ ROUND ]; // 密钥种子
WORD pwEncryptKey [ KEYSIZE * ROUND + BLOCKSIZE ]; // 加密密钥
WORD pwDecryptKey [ KEYSIZE * ROUND + BLOCKSIZE ]; // 解密密钥
WORD Addition ( WORD x , WORD y );
void GenDecryptKey();
// 生成加密密钥
void GenEncryptKey ( );
// 对密钥种子循环左移25位,生成一组密钥子块
void GenSubKey ( );
// 求一整数在模65537下的逆
WORD Inverse ( WORD x );
/*
加密或解密过程中的单轮迭代
sTurn 指出迭代的轮数
bCrypt 指出是加密还是解密。若为true,则是加密;若为false,则是解密
*/
void Iteration ( short sTurn , bool bCrypt);
// 求两数模65537之积
WORD Multi ( WORD x , WORD y );
public:
CIdea();
virtual ~CIdea();
WORD wCipher [ BLOCKSIZE ] ; // 密文块
WORD wPlain [ BLOCKSIZE ] ; // 明文块
void Encipher ( ); //加密函数
void Decipher (); //解密函数
// 设置新的密钥种子,并产生新的加密和解密密钥
void SetNewKey( unsigned short int * KeySeed);
};
#endif // !defined(AFX_IDEA_H__61B38200_0CC8_4FBF_9055_B3591B5F4EDD__INCLUDED_)