Convert a big number given as a string to an OpenSSL BIGNUM

五迷三道 提交于 2021-02-07 02:58:04

问题


I am trying to convert a string p_str representing a big integer to a BIGNUM p using the OpenSSL library.

#include <stdio.h>
#include <openssl/bn.h>

int main ()
{
  /* I shortened the integer */
  unsigned char *p_str = "82019154470699086128524248488673846867876336512717";

  BIGNUM *p = BN_bin2bn(p_str, sizeof(p_str), NULL);

  BN_print_fp(stdout, p);
  puts("");

  BN_free(p);
  return 0;
}

Compiled it with:

gcc -Wall -Wextra -g -o convert convert.c -lcrypto

But, when I execute it, I get the following result:

3832303139313534

回答1:


unsigned char *p_str = "82019154470699086128524248488673846867876336512717";

BIGNUM *p = BN_bin2bn(p_str, sizeof(p_str), NULL);

Use int BN_dec2bn(BIGNUM **a, const char *str) instead.

You would use BN_bin2bn when you have an array of bytes (and not a NULL terminated ASCII string).

The man pages are located at BN_bin2bn(3).

The correct code would look like this:

#include <stdio.h>
#include <openssl/bn.h>

int main ()
{
  static const
  char p_str[] = "82019154470699086128524248488673846867876336512717";

  BIGNUM *p = BN_new();
  BN_dec2bn(&p, p_str);

  char * number_str = BN_bn2hex(p);
  printf("%s\n", number_str);

  OPENSSL_free(number_str);
  BN_free(p);

  return 0;
}


来源:https://stackoverflow.com/questions/30077562/convert-a-big-number-given-as-a-string-to-an-openssl-bignum

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!