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

📄 bftest.cpp

📁 这是一个blowfish加密算法。该算法是从speakfs提取
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        printf("set_key test data\n");
        printf("data[8]= ");
        for (j=0; j<8; j++)
                printf("%02X",key_data[j]);
        printf("\n");
        for (i=0; i<KEY_TEST_NUM-1; i++)
                {
                printf("c=");
                for (j=0; j<8; j++)
                        printf("%02X",key_out[i][j]);
                printf(" k[%2d]=",i+1);
                for (j=0; j<i+1; j++)
                        printf("%02X",key_test[j]);
                printf("\n");
                }

        printf("\nchaining mode test data\n");
        printf("key[16]   = ");
        for (j=0; j<16; j++)
                printf("%02X",cbc_key[j]);
        printf("\niv[8]     = ");
        for (j=0; j<8; j++)
                printf("%02X",cbc_iv[j]);
        printf("\ndata[%d]  = '%s'",strlen(cbc_data)+1,cbc_data);
        printf("\ndata[%d]  = ",strlen(cbc_data)+1);
        for (j=0; j<strlen(cbc_data)+1; j++)
                printf("%02X",cbc_data[j]);
        printf("\n");
        printf("cbc cipher text\n");
        printf("cipher[%d]= ",32);
        for (j=0; j<32+1; j++)
                printf("%02X",cbc_ok[j]);
        printf("\n");

        printf("cfb64 cipher text\n");
        printf("cipher[%d]= ",strlen(cbc_data)+1);
        for (j=0; j<strlen(cbc_data)+1; j++)
                printf("%02X",cfb64_ok[j]);
        printf("\n");

        printf("ofb64 cipher text\n");
        printf("cipher[%d]= ",strlen(cbc_data)+1);
        for (j=0; j<strlen(cbc_data)+1; j++)
                printf("%02X",ofb64_ok[j]);
        printf("\n");
        return(0);
        }
int test();
/*
int main(int argc,char *argv)
//int argc;
//char *argv[];
        {
        int ret;

        if (argc > 1)
                ret=print_test_data();
        else
                ret=test();

        exit(ret);
		return 0;
        }
*/
int test()
        {
        unsigned char cbc_in[40],cbc_out[40],iv[8];
        int i,n,err=0;
        BF_KEY key;
        BF_LONG data[2]; 
        unsigned char out[8]; 
        unsigned long len;

        printf("testing blowfish in raw ecb mode\n");
        for (n=0; n<2; n++)
                {
                BF_set_key(&key,strlen(bf_key[n]),(unsigned char *)bf_key[n]);

                data[0]=bf_plain[n][0];
                data[1]=bf_plain[n][1];
                BF_encrypt(data,&key,BF_ENCRYPT);
                if (memcmp(&(bf_cipher[n][0]),&(data[0]),8) != 0)
                        {
                        printf("BF_encrypt error encrypting\n");
                        printf("got     :");
                        for (i=0; i<2; i++)
                                printf("%08lX ",data[i]);
                        printf("\n");
                        printf("expected:");
                        for (i=0; i<2; i++)
                                printf("%08lX ",bf_cipher[n][i]);
                        err=1;
                        printf("\n");
                        }

                BF_encrypt(&(data[0]),&key,BF_DECRYPT);
                if (memcmp(&(bf_plain[n][0]),&(data[0]),8) != 0)
                        {
                        printf("BF_encrypt error decrypting\n");
                        printf("got     :");
                        for (i=0; i<2; i++)
                                printf("%08lX ",data[i]);
                        printf("\n");
                        printf("expected:");
                        for (i=0; i<2; i++)
                                printf("%08lX ",bf_plain[n][i]);
                        printf("\n");
                        err=1;
                        }
                }

        printf("testing blowfish in ecb mode\n");

        for (n=0; n<NUM_TESTS; n++)
                {
                BF_set_key(&key,8,ecb_data[n]);

                BF_ecb_encrypt(&(plain_data[n][0]),out,&key,BF_ENCRYPT);

                if (memcmp(&(cipher_data[n][0]),out,8) != 0)
                        {
                        printf("BF_ecb_encrypt blowfish error encrypting\n");
                        printf("got     :");
                        for (i=0; i<8; i++)
                                printf("%02X ",out[i]);
                        printf("\n");
                        printf("expected:");
                        for (i=0; i<8; i++)
                                printf("%02X ",cipher_data[n][i]);
                        err=1;
                        printf("\n");
                        }

                BF_ecb_encrypt(out,out,&key,BF_DECRYPT);
                if (memcmp(&(plain_data[n][0]),out,8) != 0)
                        {
                        printf("BF_ecb_encrypt error decrypting\n");
                        printf("got     :");
                        for (i=0; i<8; i++)
                                printf("%02X ",out[i]);
                        printf("\n");
                        printf("expected:");
                        for (i=0; i<8; i++)
                                printf("%02X ",plain_data[n][i]);
                        printf("\n");
                        err=1;
                        }
                }

        printf("testing blowfish set_key\n");
        for (n=1; n<KEY_TEST_NUM; n++)
                {
                BF_set_key(&key,n,key_test);
                BF_ecb_encrypt(key_data,out,&key,BF_ENCRYPT);
                if (memcmp(out,&(key_out[n-1][0]),8) != 0)
                        {
                        printf("blowfish setkey error\n");
                        err=1;
                        }
                }

        printf("testing blowfish in cbc mode\n");
        len=strlen(cbc_data)+1;

        BF_set_key(&key,16,cbc_key);
        memset(cbc_in,0,40);
        memset(cbc_out,0,40);
        memcpy(iv,cbc_iv,8);
        BF_cbc_encrypt((unsigned char *)cbc_data,cbc_out,len,
                &key,iv,BF_ENCRYPT);
        if (memcmp(cbc_out,cbc_ok,32) != 0)
                {
                err=1;
                printf("BF_cbc_encrypt encrypt error\n");
                for (i=0; i<32; i++) printf("0x%02X,",cbc_out[i]);
                }
        memcpy(iv,cbc_iv,8);
        BF_cbc_encrypt(cbc_out,cbc_in,len,
                &key,iv,BF_DECRYPT);
        if (memcmp(cbc_in,cbc_data,strlen(cbc_data)+1) != 0)
                {
                printf("BF_cbc_encrypt decrypt error\n");
                err=1;
                }

        printf("testing blowfish in cfb64 mode\n");

        BF_set_key(&key,16,cbc_key);
        memset(cbc_in,0,40);
        memset(cbc_out,0,40);
        memcpy(iv,cbc_iv,8);
        n=0;
        BF_cfb64_encrypt((unsigned char *)cbc_data,cbc_out,(long)13,
                &key,iv,&n,BF_ENCRYPT);
        BF_cfb64_encrypt((unsigned char *)&(cbc_data[13]),&(cbc_out[13]),len-13,
                &key,iv,&n,BF_ENCRYPT);
        if (memcmp(cbc_out,cfb64_ok,(int)len) != 0)
                {
                err=1;
                printf("BF_cfb64_encrypt encrypt error\n");
                for (i=0; i<(int)len; i++) printf("0x%02X,",cbc_out[i]);
                }
        n=0;
        memcpy(iv,cbc_iv,8);
        BF_cfb64_encrypt(cbc_out,cbc_in,17,
                &key,iv,&n,BF_DECRYPT);
        BF_cfb64_encrypt(&(cbc_out[17]),&(cbc_in[17]),len-17,
                &key,iv,&n,BF_DECRYPT);
        if (memcmp(cbc_in,cbc_data,(int)len) != 0)
                {
                printf("BF_cfb64_encrypt decrypt error\n");
                err=1;
                }

        printf("testing blowfish in ofb64\n");

        BF_set_key(&key,16,cbc_key);
        memset(cbc_in,0,40);
        memset(cbc_out,0,40);
        memcpy(iv,cbc_iv,8);
        n=0;
        BF_ofb64_encrypt((unsigned char *)cbc_data,cbc_out,(long)13,&key,iv,&n);
        BF_ofb64_encrypt((unsigned char *)&(cbc_data[13]),
                &(cbc_out[13]),len-13,&key,iv,&n);
        if (memcmp(cbc_out,ofb64_ok,(int)len) != 0)
                {
                err=1;
                printf("BF_ofb64_encrypt encrypt error\n");
                for (i=0; i<(int)len; i++) printf("0x%02X,",cbc_out[i]);
                }
        n=0;
        memcpy(iv,cbc_iv,8);
        BF_ofb64_encrypt(cbc_out,cbc_in,17,&key,iv,&n);
        BF_ofb64_encrypt(&(cbc_out[17]),&(cbc_in[17]),len-17,&key,iv,&n);
        if (memcmp(cbc_in,cbc_data,(int)len) != 0)
                {
                printf("BF_ofb64_encrypt decrypt error\n");
                err=1;
                }

        return(err);
        }


int main(){
	BF_KEY key;
	//明文
    unsigned char in[]="I have had my best love before, but I did not treasure her. When I lost her, I fell regretful. It is the most painful matter in this world. If God can give me another chance, I will say 3 words to her --- I love you. If you have to give a time limit to this love, I hope it is 10 thousand years";  
	int len,n=0;
	unsigned char out[295];
	unsigned char iv[8];
	len = strlen((char*)in);

	printf("%s\n",in);
	printf("%d\n",len);

	memset(iv, 0, sizeof(iv));
	BF_set_key(&key,16,(unsigned char*)in);
	BF_cbc_encrypt(in,out,len,&key,iv,BF_ENCRYPT);
	for (int i = 0;i < 294; i++)
	{
		printf("%2X",out[i]);
	}
	printf("\n");
	
	memset(iv, 0, sizeof(iv));
	BF_cbc_encrypt(out,in,len,&key,iv,BF_DECRYPT);

	printf("%s\n",in);
	n++;


	return 0;
}

⌨️ 快捷键说明

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