C 和 libgcrypt。 Str 键入 gcry_error_t。然后加
C and libgcrypt. Str to type gcry_error_t. Then add
我正在尝试将字符串“255”中的数字转换为类型 gcry_mpi_t。
gcry_mpi_dump 告诉我 323535 而不是 gcry_mpi_add 和 gcry_mpi_print(GCRYMPI_FMT_USG... ) 不能正常工作。
#include <gcrypt.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
const char *byte_to_binary(int x)
{
static char b[9];
b[0] = '[=11=]';
int z;
for (z = 128; z > 0; z >>= 1) {
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
int main() {
gcry_mpi_t max_ul = gcry_mpi_new(64);
gcry_mpi_t mul = gcry_mpi_new(128);
gcry_mpi_t cript_prime;
char mybignum[5] = {0};
cript_prime = gcry_mpi_new(5);
mybignum[0] ='2';
mybignum[1] ='5';
mybignum[2]='5';
printf("First %s\n", mybignum);
char buffer[60] = {0};
size_t scanned = 0;
strcpy(mybignum, "255");
gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, &mybignum, 5, NULL);
printf("read : %ld \n", scanned);
printf(" max_ul is ");
gcry_mpi_dump(max_ul); printf("\n");
gcry_mpi_add(mul,max_ul,max_ul );
printf(" mul is ");
// выводим на экран
gcry_mpi_dump(mul); printf("\n");
gcry_mpi_print(GCRYMPI_FMT_USG, buffer, 30 , &scanned, mul);
printf("\nwrite : %ld \n", scanned);
printf("\n output the line %s \n", buffer);
for (int i=0; i<10 ; i++)
{
printf("%s\n",byte_to_binary(buffer[i]) );
}
printf(" \n mul is: ");
gcry_mpi_dump(mul); printf("\n");
gcry_mpi_release(mul);
gcry_mpi_release(max_ul);
printf("____________________________________\n");
return 0 ;
}
可以看到输出:
lib 取自 https://gnupg.org/download/index.html
gcc 版本 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
使用命令编译。
gcc test.c -lgcrypt
如果你有这种类型的例子,我想看看。
gcry_mpi_scan()
的文档说:
Convert the external representation of an integer stored in buffer …
format describes the format of the MPI as stored in
buffer: …
GCRYMPI_FMT_USG
Simple unsigned integer.
这确实有些不清楚,因此您将外部表示误解为ASCII十进制表示;事实上,它意味着存储在内存中的整数表示。因此,要将数字 255 存储在 char mybignum[5]
中并进行转换,您可以这样写:
*mybignum = 255;
gcry_error_t error = gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, mybignum, 1, &scanned);
因此,gcry_mpi_print(GCRYMPI_FMT_USG, buffer, 30 , &scanned, mul)
将 MPI a 转换为不适合用 printf("\n output the line %s \n", buffer)
打印的表示。
str 到 gcry_mpi_t.
我使用的最好的方法是:
gcry_mpi_t p = gcry_mpi_new(0);
gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0, 0);
然后一切正常
我正在尝试将字符串“255”中的数字转换为类型 gcry_mpi_t。 gcry_mpi_dump 告诉我 323535 而不是 gcry_mpi_add 和 gcry_mpi_print(GCRYMPI_FMT_USG... ) 不能正常工作。
#include <gcrypt.h>
#include <assert.h>
#include <stdio.h>
#include <string.h>
const char *byte_to_binary(int x)
{
static char b[9];
b[0] = '[=11=]';
int z;
for (z = 128; z > 0; z >>= 1) {
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
int main() {
gcry_mpi_t max_ul = gcry_mpi_new(64);
gcry_mpi_t mul = gcry_mpi_new(128);
gcry_mpi_t cript_prime;
char mybignum[5] = {0};
cript_prime = gcry_mpi_new(5);
mybignum[0] ='2';
mybignum[1] ='5';
mybignum[2]='5';
printf("First %s\n", mybignum);
char buffer[60] = {0};
size_t scanned = 0;
strcpy(mybignum, "255");
gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, &mybignum, 5, NULL);
printf("read : %ld \n", scanned);
printf(" max_ul is ");
gcry_mpi_dump(max_ul); printf("\n");
gcry_mpi_add(mul,max_ul,max_ul );
printf(" mul is ");
// выводим на экран
gcry_mpi_dump(mul); printf("\n");
gcry_mpi_print(GCRYMPI_FMT_USG, buffer, 30 , &scanned, mul);
printf("\nwrite : %ld \n", scanned);
printf("\n output the line %s \n", buffer);
for (int i=0; i<10 ; i++)
{
printf("%s\n",byte_to_binary(buffer[i]) );
}
printf(" \n mul is: ");
gcry_mpi_dump(mul); printf("\n");
gcry_mpi_release(mul);
gcry_mpi_release(max_ul);
printf("____________________________________\n");
return 0 ;
}
可以看到输出:
lib 取自 https://gnupg.org/download/index.html
gcc 版本 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
使用命令编译。 gcc test.c -lgcrypt
如果你有这种类型的例子,我想看看。
gcry_mpi_scan()
的文档说:
Convert the external representation of an integer stored in buffer …
format describes the format of the MPI as stored in buffer: …
GCRYMPI_FMT_USG
Simple unsigned integer.
这确实有些不清楚,因此您将外部表示误解为ASCII十进制表示;事实上,它意味着存储在内存中的整数表示。因此,要将数字 255 存储在 char mybignum[5]
中并进行转换,您可以这样写:
*mybignum = 255;
gcry_error_t error = gcry_mpi_scan(&max_ul, GCRYMPI_FMT_USG, mybignum, 1, &scanned);
因此,gcry_mpi_print(GCRYMPI_FMT_USG, buffer, 30 , &scanned, mul)
将 MPI a 转换为不适合用 printf("\n output the line %s \n", buffer)
打印的表示。
str 到 gcry_mpi_t.
我使用的最好的方法是:
gcry_mpi_t p = gcry_mpi_new(0);
gcry_mpi_scan(&p, GCRYMPI_FMT_HEX, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 0, 0);
然后一切正常