我试图确认/获取十六进制的mpi值的无符号int (基数10 /十进制)值。我使用以下代码:
#include <gcrypt.h>
#include <stdio.h>
static gcry_mpi_t privkey = NULL;
int main(){
char *parmstr = "48BFDA215C31A9F0B226B3DB11F862450A0F30DA";
printf("starting program\n");
gcry_mpi_scan(&privkey, GCRYMPI_FMT_HEX, (char *)parmstr, 0, NULL);
printf("printing hashed (?) mpi\n");
gcry_mpi_dump(privkey);
printf("\n");
size_t gablen;
unsigned char *result;
/* get length */
gcry_mpi_print (GCRYMPI_FMT_USG, NULL, 0, &gablen, privkey);
result = gcry_malloc_secure(gablen);
/* get actual value */
gcry_mpi_print (GCRYMPI_FMT_USG, result, gablen, NULL, privkey);
/* print actual value */
printf("result: %s\n", result);
printf("finished\n");
}我得到的结果如下:
$ ./foo
starting program
printing hashed (?) mpi
48BFDA215C31A9F0B226B3DB11F862450A0F30DA
result: H¿Ú!\1©ð²&³ÛøbE
0Ú
finished我将使用“结果:”行来打印实际的无符号int (基数为10 /十进制)值。
私钥是从隐藏的Pidgin插件中获取的,我正试图使用这个插件。
编辑
有谁能确认实际的无符号int (基数10 /十进制)值应该是
415325779662433871844955547383752003988573073626
我可能会更新程序,用这个值在gcrypt中创建一个新的mpi,并查看HEX值是否与我已经拥有的相同。今天晚些时候我会这么做。
编辑2
因此,我试图执行以下操作,以打印上面提到的int值的HEX值。有些地方出了问题:
gcry_mpi_t cript_prime;
char buffer[50] = {0};
char number[50] = {0};
cript_prime = gcry_mpi_new(50);
strcpy(number,"415325779662433871844955547383752003988573073626");
gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL);
gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime);
printf("The number tested is: %s\n",buffer);
printf("trying to convert to HEX\n");
/* get actual value */
gcry_mpi_print (GCRYMPI_FMT_HEX, buffer, sizeof(buffer), NULL, cript_prime);
/* print actual value */
printf("result: %s\n", buffer);产出如下:
result: 48BFDA215C31A9F0B226B3DB11F862450A0F30DA
The number tested is: 415325779662433871844955547383752003988573073626
trying to convert to HEX
result: 415325779662433871844955547383752003988573073626编辑3
我对文章做了一些更新,基本上我试图打印由gcrypt库生成的十六进制值的base10十进制值。我正在寻找这个值来确认我为读取这些值所做的实现。我在寻找一种加密功能来实现这一点。似乎不支持这种说法?
发布于 2013-03-01 03:02:13
这里是一个工作脚本,缓冲区太小了
#include <gcrypt.h>
#include <stdio.h>
int main(){
gcry_error_t err;
gcry_mpi_t cript_prime;
unsigned char buffer[401] = {0};
char number[101] = {0};
cript_prime = gcry_mpi_new(101);
strcpy(number, "415325779662433871844955547383752003988573073626");
gcry_mpi_scan(&cript_prime, GCRYMPI_FMT_USG, number, sizeof(number), NULL);
err = gcry_mpi_print(GCRYMPI_FMT_USG, buffer, sizeof(buffer), NULL, cript_prime);
if (err != 0){
printf("error: %d\n", err);
return -1;
}
printf("The number tested is: %s\n",buffer);
printf("trying to convert to HEX\n");
/* get actual value */
err = gcry_mpi_print(GCRYMPI_FMT_HEX, buffer, sizeof(buffer), NULL, cript_prime);
if (err != 0){
gcry_err_code_t code = gcry_err_code(err);
printf("error: %d\n", code);
return -1;
}
/* print actual value */
printf("result: %s\n", buffer);
printf("finished\n");
return 0;
}我还通过以下网站证实了我的想法:http://www.unitconversion.org/numbers/base-10-to-base-16-conversion.html
这将说明十六进制(基地-16) 48BFDA215C31A9F0B226B3DB11F862450A0F30DA实际为415325779662433762080404206464628666084640806848 (Bas-10)。
发布于 2013-02-26 03:44:38
result1 =( >> 24) & 0xff;
这一行将一个nul字节放入偏移量1处的字节中,放入result中。我不知道在什么地方初始化偏移量为零的字节,但是偏移量2及更高版本的字节已经超过了您所构造的字符串的末尾。它的格式设置从result+5开始,所以您应该在这里打印:
gcry_mpi_print (GCRYMPI_FMT_USG,结果+ 5,加布伦,空,私钥);printf(“结果:%s\n",结果+ 5);
https://stackoverflow.com/questions/15080516
复制相似问题