Пример #1
0
unsigned char KEY_CalcMAC_2(unsigned char *pucInData, unsigned short uiInLen, unsigned char *pucOutMAC)
{
    unsigned char ucResult;
    unsigned char aucHexData[8], aucAscData[17];
    unsigned char *pucPtr;
    unsigned short uiI, uiJ, uiLen;

    pucPtr = pucInData;
    KEY_DumpData("初始数据:\n", pucPtr, uiInLen);

    memset(aucHexData, 0, sizeof(aucHexData));
    for(uiI = 0; uiI < uiInLen; uiI += 8)
    {
        uiLen = min(8, pucInData+uiInLen-pucPtr);
        for(uiJ = 0; uiJ < uiLen; uiJ++)
        {
            aucHexData[uiJ] ^= *(pucPtr+uiJ);
        }
        pucPtr += 8;
    }

    memset(aucAscData, 0, sizeof(aucAscData));
    hex_asc(aucAscData, aucHexData, 16);
    aucAscData[16] = 0;

    memset(aucHexData, 0, sizeof(aucHexData));
    ucResult = Encrypt8ByteSingleKey_47(KEYARRAY_GOLDENCARDSH, KEYINDEX_GOLDENCARDSH_MAK, aucAscData, aucHexData);
    KEY_DumpData("DES加密后数据:\n", aucHexData, 8);

    if(!ucResult)
    {
        for(uiI = 0; uiI < 8; uiI++)
            aucHexData[uiI] ^= aucAscData[8+uiI];
        ucResult = Encrypt8ByteSingleKey_47(KEYARRAY_GOLDENCARDSH, KEYINDEX_GOLDENCARDSH_MAK, aucHexData, aucHexData);
        KEY_DumpData("再次DES加密后数据:\n", aucHexData, 8);
    }

    if(!ucResult)
    {
        memset(aucAscData, 0, sizeof(aucAscData));
        hex_asc(aucAscData, aucHexData, 16);
        KEY_DumpData("最后转换16位后数据:\n", aucAscData, 16);
    }

    if(!ucResult)
        memcpy(pucOutMAC, aucAscData, 8);

    return ucResult;
}
Пример #2
0
int main(int argc, char * argv[])
{
	int opt;
	while((opt = getopt(argc,argv,"c:d:f:w:i:o:")) != EOF)
	{
		switch(opt)
		{
		case 'c':
			CoverThreshold = atof(optarg);
			break;
		case 'd':
			DiscardThreshold = atof(optarg);
			break;
		case 'f':
			FThreshold = atof(optarg);
			break;
		case 'w':
			WThreshold = atof(optarg);
			break;
		case 'i':
			memcpy(ReadFileName,optarg,strlen(optarg));
			ReadFileName[strlen(optarg)] = '\0';
			break;
		case 'o':
			memcpy(WriteFileName,optarg,strlen(optarg));
			WriteFileName[strlen(optarg)] = '\0';
			break;
		}
	}
	/*if(argc == 2)
		WThreshold = atof(argv[1]);
	if(argc == 3)
	{
		WThreshold = atof(argv[1]);
		FThreshold = atof(argv[2]);
	}
	if(argc == 4)
	{
		WThreshold = atof(argv[1]);
		FThreshold = atof(argv[2]);
		DiscardThreshold = atof(argv[3]);
	}*/
	//initialize the queue
	MQueue = (Queue *)malloc(sizeof(Queue));
	MQueue->QnodeNum = 0;
	MQueue->StartQnode = (Qnode *)malloc(sizeof(Qnode));
	MQueue->EndQnode = (Qnode *)malloc(sizeof(Qnode));
	//
	MQueue->StartQnode->NextQnode = MQueue->EndQnode;//recording the relationship of the virsital start node and the virtual end node initially
	MQueue->EndQnode->PreviousQnode = MQueue->StartQnode;
	//
	MQueue->StartQnode->PreviousQnode = NULL;//no former node to the virtual start node
	MQueue->EndQnode->NextQnode = NULL;//node latter node to the virtual end node
	MQueue->StartQnode->QTnode = NULL;//NULL in the virtual start node
	MQueue->EndQnode->QTnode = NULL;//NULL in the virtual end node

	//judge m and n
	char str[10000];
	get_size(m);
	
	UsedTransactionNum = m;
	TransactionArray = (Transaction *)malloc(m*sizeof(Transaction));
	FILE * fr = fopen(ReadFileName,"r");
	for( int i = 0; i < m; i ++)
	{//transfer each line of the data into a Transaction, we regard that there are no more than 20000 letters each line
		fgets(str,10000,fr);
		make_transaction(TransactionArray,i,str);
	}
	fclose(fr);
	//till now, all the data in the file has been read into the memory
	//initial the structure of the Tree
	Tree * MTree;
	MTree = (Tree *)malloc(sizeof(MTree));
	MTree->TnodeNum = 0;
	MTree->Root = (Tnode *)malloc(sizeof(Tnode));
	MTree->Root->TTransactionNum = m;
	MTree->Root->TTransaction = (Transaction *)malloc(MTree->Root->TTransactionNum * sizeof(Transaction));//allocate memory for the Transaction in the root
	for( int i = 0; i < MTree->Root->TTransactionNum; i ++)
	{
		MTree->Root->TTransaction[i].ItemArray = TransactionArray[i].ItemArray;//copy all the elements in the TransactionArray into the MTree
		MTree->Root->TTransaction[i].PacketNum = TransactionArray[i].PacketNum;
	}
	MTree->Root->ChildTnodeArray = NULL;
	MTree->Root->ChildTnodeNum = 0;
	MTree->Root->FatherTnode = NULL;
	MTree->Root->NextTnode = NULL;
	MTree->Root->PreviousTnode = NULL;
	MTree->Root->TItem = 0;
	MTree->Root->TLevel = 0;
	MTree->Root->TSerialNum = 0;
	en_queue(MTree->Root);
	//while(MQueue->QnodeNum)
	//{
		//make_split(MTree,de_queue());
	//}
	int ThisLevelNum = 0;
	int LastTnodeLevel = 0; // the level of last Tnode, it is used for judging whether the level has changed
	int TillLastLevelFinishedNum = 0;
	int TillThisLevelFinishedNum = 0;
	//the below code is to input all the data into a file
	FILE * fw = fopen(WriteFileName,"w");
	Tnode * TmpTnode;
	//en_queue(MTree->Root);
	if( WThreshold < ((float)2)/MTree->Root->TTransactionNum)
		WThreshold = ((float)2)/MTree->Root->TTransactionNum - 0.01;
	while(MQueue->QnodeNum)
	{
		TmpTnode = de_queue();
		//fprintf(fw,"TSerialNum:%d UsedTransactionNum: %d ", TmpTnode->TSerialNum,  UsedTransactionNum);
	//if(TmpTnode->TSerialNum > 30)
	//	fprintf(fw,"Father %d ", TmpTnode->FatherTnode->TSerialNum);
	//	fprintf(stderr,"A\n");
		make_split(MTree,TmpTnode);// all the push are done inside make_split
	//fprintf(fw,"AUsedTNum: %d children;: %d\n",UsedTransactionNum,TmpTnode->ChildTnodeNum);
	//	fprintf(stderr,"%d\n",UsedTransactionNum);
	//	fprintf(stderr,"%d\n",MTree->Root->TTransactionNum);
	//	fprintf(stderr,"%f\n",CoverThreshold);
	//	 if(MQueue->QnodeNum == 0)
	//		fprintf(fw,"reach end\n");
		if((float)UsedTransactionNum / MTree->Root->TTransactionNum < CoverThreshold)
		{
	//	fprintf(stderr,"B\n");
			while(MQueue->QnodeNum)
			{
				TmpTnode = de_queue();
				fprintf(fw,"	Numof-Tran:%5d	\n",TmpTnode->TTransactionNum);
				for( int i = 0; i < TmpTnode->TLevel; i ++)
					fprintf(fw,"(@%d %d)%s %c ",TmpTnode->TItem[i].PacketSeqNum, TmpTnode->TItem[i].ByteSeqNum,TmpTnode->TItem[i].Pload,hex_asc(TmpTnode->TItem[i].Pload)==10?160:hex_asc(TmpTnode->TItem[i].Pload));
				fprintf(fw,"\n");
			}
			break;
		}
		if(TmpTnode->ChildTnodeNum)
			continue;
		fprintf(fw,"Numof-Tran:%5d	\n",TmpTnode->TTransactionNum);
		for( int i = 0; i < TmpTnode->TLevel; i ++)
			fprintf(fw,"(@%d %d)%s %c ",TmpTnode->TItem[i].PacketSeqNum, TmpTnode->TItem[i].ByteSeqNum,TmpTnode->TItem[i].Pload, hex_asc(TmpTnode->TItem[i].Pload)==10?160:hex_asc(TmpTnode->TItem[i].Pload));
		fprintf(fw,"\n");
	}
	//fprintf(fw,"TnodeNum: %d\n",MTree->TnodeNum);
	fprintf(fw,"\n\n%.4f%% of all the Transactions are covered by this feature\n", 100 * (float)UsedTransactionNum / MTree->Root->TTransactionNum);
	fprintf(fw,"Parameter: \n	FThreshold: %.2f;\n 	WThreshold: %.2f;\n 	DiscardThreshold: %.2f;\n 	CoverThreshold: %.2f;\n",FThreshold, WThreshold, DiscardThreshold, CoverThreshold);
	fclose(fw);
	fprintf(stdout,"success!\n");
	return 0;
}