⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idea.h

📁 IDEA加密算法
💻 H
字号:
// IDEA.h: interface for the CIDEA class.

/**
  *	描述:    此文件是对实现专利单机版中加密、解密模块中的变量和函数的声明
  *	作者:    吴栋
  *	起止日期:2003年4月30日至2003年5月8日
*/

#pragma once

#ifndef BLOCKSIZE
#define BLOCKSIZE 4 
#endif
#ifndef ROUND
#define ROUND 8
#endif
#ifndef SUBKEYSIZE
#define SUBKEYSIZE 6 
#endif
#ifndef CARDINALITY
#define CARDINALITY 65536
#endif
#ifndef SHIFTLEFT
#define SHIFTLEFT 25
#endif

/**
  *	模块名:    CIDEA
  *	说明:      该模块是对IDEA加密、解密算法的具体实现
  *	创建日期:  2003年4月30日
  * 调用模块:  无
  * 被调用模块:CEncrypt
*/

class CIDEA  
{
private:
	
	WORD wKeySeed[ ROUND ];										// 密钥种子
	WORD pwEncryptKey [ SUBKEYSIZE * ROUND + BLOCKSIZE ];		// 加密密钥
	WORD pwDecryptKey [ SUBKEYSIZE * ROUND + BLOCKSIZE ];		// 解密密钥

protected:
	WORD wCiphertext [ BLOCKSIZE ] ;   // 密文块
	WORD wCleartext [ BLOCKSIZE ] ;	   // 明文块

protected:
	/**
	 * 函数名:Addition
	 * 参数:  wNum1 16位无符号整数
	 *	       wNum2 16位无符号整数	
	 * 返回值:返回16为无符号整数
	 * 说明:  求两数模65536之和
	*/
	WORD Addition ( WORD wNum1 , WORD wNum2 );
	
	/**
	 * 函数名: Ciphering
	 * 参数:   无
	 * 返回值: 无
	 * 说明:   对一组明文块进行加密
	*/
	void Ciphering ( );
	
	/**
	 * 函数名: Deciphering
	 * 参数:   无
	 * 返回值: 无
	 * 说明:   对一组密文块进行解密
	*/
	void Deciphering();

	/**
	 * 函数名: GenDecryptKey
	 * 参数:   无
	 * 返回值: 无
	 * 说明:   生成解密密钥
	*/
	void GenDecryptKey();

	/**
	 * 函数名: GenEncryptKey
	 * 参数:   无
	 * 返回值: 无
	 * 说明:   生成加密密钥
	*/
	void GenEncryptKey ( );

	/**
	 * 函数名: GenSubKey
	 * 参数:   无
	 * 返回值: 无
	 * 说明:   对密钥种子循环左移25位,生成一组密钥子块
	*/
	void GenSubKey ( );
	
	/**
	 * 函数名: Inverse
	 * 参数:   wNum 16位无符号整数
	 * 返回值: 返回16位无符号整数
	 * 说明:   求一整数在模65537下的逆
	*/
	WORD Inverse ( WORD wNum );
	
	/**
	 * 函数名:Interation
	 * 参数:  sTurn  指出迭代的轮数
	 *		   bCrypt 指出是加密还是解密。若为true,则是加密;若为false,则是解密	
	 * 返回值:无
	 * 说明:  加密或解密过程中的单轮迭代
	*/
	void Iteration ( short sTurn , bool bCrypt);
	
	/**
	 * 函数名:Multiplication
	 * 参数:  wNum1 16位无符号整数
	 *		   wNum2 16位无符号整数	
	 * 返回值:返回16为无符号整数
	 * 说明:  求两数模65537之积
	*/
	WORD Multiplication ( WORD wNum1 , WORD wNum2 );

public:
	CIDEA();

	/**
	 * 函数名: SetNewKey
	 * 参数:   pwKeySeed 指向新密钥种子的指针
	 *			nCount	  密钥种子的长度
	 * 返回值: 无
	 * 说明:   设置新的密钥种子,并产生新的加密和解密密钥
	 */
	virtual void SetNewKey( WORD * pwKeySeed, int nCount = ROUND );

	virtual ~CIDEA();

};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -