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

📄 xor256block.h

📁 一些加密算法的介绍,可对文件或字符串加密
💻 H
字号:

// XOR256Block.h

#ifndef __XOR256BLOCK_H__
#define __XOR256BLOCK_H__

//Typical DISCLAIMER:
//The code in this project is Copyright (C) 2003 by George Anescu. You have the right to
//use and distribute the code in any way you see fit as long as this paragraph is included
//with the distribution. No warranties or claims are made as to the validity of the
//information and code contained herein, so use it at your own risk.

#include "ArcfourPRNG.h"
#include "Method.h"
#include <memory>

using namespace std;

class CXOR256Block : public IMethod
{
private:
	enum { KEY_MAX = 256 };
	enum { BLOCK_MAX = 256 };
	enum { BUFF_LEN=1024 };

public:
	//CONSTRUCTOR
	CXOR256Block();

	//DESTRUCTOR
	~CXOR256Block();

	//Expand a user-supplied key material into a session key.
	// keydata - The key material expanded to 256 bytes user-key to use.
	// keydatalength - how much to take from keydata
	// chain - initial chain block for CBC and CFB modes.
	// iMode - Chaining Operation Mode
	// iPadding - Padding Mode
	// key length is fixed to 256
	void Initialize(char const* keydata, int keydatalength, char const* chain=sm_chain0,
		int blockSize=16, int iORounds=4, int iIRounds=4, int iMode=ECB, int iPadding=ZEROES);
	//Resetting the Initialization Vector
	void ResetChain();
	//Encryption for a string of chars
	void Encrypt(char const* in, char* result, size_t n);
	//Decryption for a string of chars
	void Decrypt(char const* in, char* result, size_t n);
	//Encryption for a File
	void EncryptFile(string const& rostrFileIn, string const& rostrFileOut);
	//Decryption for a File
	void DecryptFile(string const& rostrFileIn, string const& rostrFileOut);

private:
	//Compute Signature
	void Signature(char* pcSig);
	void EncryptDirect(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void EncryptDirect1(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void EncryptReverse(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void EncryptReverse1(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void DecryptDirect(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void DecryptDirect1(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void DecryptReverse(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void DecryptReverse1(unsigned char* pucBlock, unsigned char const* pucXOR, unsigned char const* puc256);
	void EncryptBlock(unsigned char* pucBlock);
	void DecryptBlock(unsigned char* pucBlock);

	CArcfourPRNG m_oArcfourPRNG;
	int m_iBlockSize;
	int m_iBlockSize1; //m_iBlockSize-1
	//Internal Rounds
	int m_iIRounds;
	int m_iIRounds1; //m_iIRounds-1
	//External Rounds
	int m_iORounds;
	int m_iORounds1; //m_iORounds-1
	int m_iProd; //m_iBlockSize*m_iIRounds
	int m_iDelta; //(m_iORounds-1)*m_iProd
	unsigned char* m_pucXOR;
	unsigned char* m_puc256;
	//Key
	auto_ptr<char> m_apKey;
	//Chain Block
	auto_ptr<char> m_apchain0;
	auto_ptr<char> m_apchain;
	auto_ptr<unsigned char> m_apTemp;
	static char const* sm_szErrorMsgXB1;
	static char const* sm_szErrorMsgXB2;

public:
	//Null chain
	static char const sm_chain0[BLOCK_MAX]; //Max blocksize assumed
};

#endif // __XOR256BLOCK_H__

⌨️ 快捷键说明

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