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_)