coco 2 d-xファイル暗号化(lua、xml)

2956 ワード

最近多くの友達が暗号化されていることを発見しました.何人かの人が私に質問しました.私もいちいち答えられないです.ここでブログをあげます.助けてあげたいです.
暗号化というのは、ファイルをメモリに読み込んで、暗号化して保存すればいいだけです.これは暗号化されています.往々にして暗号化アルゴリズムは暗号解読アルゴリズムに対応しています.このファイルをあなたのプロジェクトで使う時(工程内でこれらのファイルを使う時は先にファイルをメモリに読み込んでいます.これは全部分かります.)、ファイルをメモリに読み込んでから解読してから使います.暗号解読を実現しました.暗号化アルゴリズムの問題については、自分で書いてもいいです.自分で方法を考えます.AESのようなソースを持つこともできます.
前にも話しましたが、ファイルの復号は、ファイルをメモリに読み込む時に復号関数を実行してから操作すれば大丈夫です.私は自分の暗号化ツールをアップロードしています.住所をダウンロードします.ここをクリックしてください.ダウンロード後はREADMEをよく読んでください.readmeによってあなたのツールを真剣に配置します.
次に、コードを解読します.同じですか?もう一度言ってください.私が提示した解読関数はファイルを読み込んだ後、ファイルを使う前に置いてください.lua暗号化については、私のlua暗号化博文を確認してください.あなたは私が今あげている暗号化関数をその異種の場所に置くだけでAES復号を実現します.無駄話は多く言わないで、コードを解読します.
//    
char* createKey(const char* keyStr, int keyLen, char* outKey)
{
	memset(outKey, 0, 32);
	int cryptLen = 0;    //       ;
	unsigned char strPer[16];     //     ;
	unsigned char keyPer[16];      //  key;
	memset(keyPer, 0, 16);
	if (keyLen  >= 16)  
	{
		memcpy(keyPer, keyStr, 16);
	}
	else //      32;
	{
		memcpy(keyPer, keyStr , keyLen );
	}

	while(true)
	{
		//  key;		
		memcpy(outKey + 16, keyPer, 16);
		//    ;
		if (cryptLen >= keyLen)  return outKey;
		memset(strPer, 0, 16);
		if (keyLen - cryptLen >= 16)  
		{
			memcpy(strPer, keyStr + cryptLen, 16);
		}
		else //      32 ;
		{
			memcpy(strPer, keyStr + cryptLen, keyLen - cryptLen);
		}
		//AES  ;
		unsigned long rk[60];
		int nrounds = rijndaelSetupEncrypt(rk, (const unsigned char *)(outKey), 256);
		memcpy(outKey, keyPer, 16 );  //     key;
		rijndaelEncrypt(rk, nrounds, strPer, keyPer);
		cryptLen += 16;

	}
	return NULL;
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//    
bool decrypt(const char* inStr, int inLen, const char* outStr, int& outLen, const char* keyStr, int keyLen)
{
	if (inLen%16 != 0) return false;
	
	char key[256];  //  ;
	createKey(keyStr, keyLen, key);   //    ;	
	unsigned long rk[60];
	int nrounds;
	int round = inLen/16;	
	char* encryStr = new char[inLen];
	nrounds = rijndaelSetupDecrypt(rk, (const unsigned char*)key, 256);
	outLen = 0;
	int time = 0;  //     ;
	while (1)
	{
		unsigned char plaintext[16];   //      ;
		unsigned char ciphertext[16];  //      ;
		memcpy(ciphertext, inStr + 16*time, 16);
		rijndaelDecrypt(rk, nrounds, ciphertext, plaintext);
		memcpy(encryStr + 16*time,  plaintext, 16);  //           pData;
		outLen += 16;
		if (++time >= round ) break;
	}
	char randNum = encryStr[outLen - 1];          //   ;
	char fillNum =  encryStr[0] ^ randNum;	     //   ;
	outLen = outLen - 1 - fillNum;
	memcpy((void*)outStr, encryStr + 1, outLen);
	delete[] encryStr;
	return true;
}
//-----------------------------------------------------------------------------
オリジナルをサポートしてください
まだ分かりませんが、QQを追加してください.497867831     親、あなたを助けてくれるなら、いい評判を覚えてください.