我需要在main函数中打印一个字符串(名为hex)。该字符串是digestInHex函数的参数,该函数用于keccak函数中。所以这里是功能:如何打印C中另一个函数使用的函数的参数?
void digestInHex(unsigned long long state[][5], unsigned char *buffer,
unsigned char *bufferLocation, int bufferSize, int size, char *hex)
{
unsigned char *byte;
int i, j;
unsigned long long *x;
const char *hexValues = "abcdef";
byte = (unsigned char *)malloc(size * sizeof(char));
hex = (char *)malloc(((size << 1) + 1) * sizeof(char));
hex[size << 1] = '\0';
/* Padding */
bufferLocation[0] = 1;
++bufferLocation;
while (bufferLocation != &buffer[bufferSize/8])
{
bufferLocation[0] = 0;
++bufferLocation;
}
buffer[(bufferSize >> 3) - 1] |= 0x80;
bufferLocation = buffer;
x = (unsigned long long *)buffer;
for (j = 0; j * 64 < bufferSize; ++j)
{
state[j/5][j % 5] |= x[j];
}
round(state);
/* Squeezing */
memcpy(byte, state, size);
reset(state);
bufferLocation = buffer;
for (i = 0; i < size; ++i)
{
hex[i << 1] = hexValues[byte[i] >> 4];
hex[(i << 1) + 1] = hexValues[byte[i] & 15];
}
free(byte);
// printf("%s\n", hex);
free(hex);
}
void keccak(const char *str, enum bitLength hashValueBitLength, char *hex)
{
int i = 0;
int j;
unsigned char *buffer;
unsigned char *bufferLocation;
const int bufferSize = 1600 - (hashValueBitLength * 2);
unsigned long long *x;
unsigned long long state[5][5];
buffer = (unsigned char *)malloc(bufferSize * sizeof(char));
bufferLocation = buffer;
reset(state);
while (str[i] != '\0')
{
bufferLocation[0] = (unsigned char)str[i];
++bufferLocation;
if (bufferLocation == &buffer[bufferSize/8])
{
bufferLocation = buffer;
x = (unsigned long long *)buffer;
for (j = 0; j * 64 < bufferSize; ++j)
{
state[j/5][j % 5] |= x[j];
}
round(state);
}
++i;
}
digestInHex(state, buffer, bufferLocation, bufferSize, hashValueBitLength/8, hex);
free(buffer);
}
正如你所看到的,keccak函数在最后使用了digestInHex函数。 digestInHex中的十六进制字符串保留给定输入的哈希输出。
主要我需要使用switch-case来比较我的新旧项目的时间值。要做到这一点,我需要运行keccak 100万次才能看清时间差异。不能看到散列输出100万次,我无法直接在digestInHex中打印十六进制字符串,这就是为什么我在digestInHex中创建了十六进制注释的printf。
另外我想在开关柜中显示散列输出。但是当我这样做时它会打印出空白。那么我怎么能打印像“4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15”哈希输出?下面是主要的:
int main()
{
int i;
clock_t begin, end;
double timeSpend;
int n;
printf("Enter 1 to see Old Project's time value\n");
printf("Enter 2 to see New Project's time value\n\n");
printf("Enter 3 to see Old Project's hash output\n");
printf("Enter 4 to see New Project's hash output\n\n");
printf("Please enter a value according to above: ");
iterator:
scanf_s("%d", &n);
switch (n)
{
case 1:
begin = clock();
for (i = 0; i < 1000000; ++i)
keccakOld("The quick brown fox jumps over the lazy dog", KECCAK_256, hexOld);
end = clock();
timeSpend = (double)(end - begin)/CLOCKS_PER_SEC;
printf("%f sec.\n", timeSpend);
break;
case 2:
begin = clock();
for (i = 0; i < 1000000; ++i)
keccak("The quick brown fox jumps over the lazy dog", KECCAK_256, hex);
end = clock();
timeSpend = (double)(end - begin)/CLOCKS_PER_SEC;
printf("%f sec.\n", timeSpend);
break;
case 3:
keccakOld("The quick brown fox jumps over the lazy dog", KECCAK_256, hexOld);
printf("%s\n", hexOld);
break;
case 4:
keccak("The quick brown fox jumps over the lazy dog", KECCAK_256, hex);
printf("%s\n", hex);
break;
default:
printf("Please re-enter a correct value: ");
goto iterator;
break;
}
return 0;
}