0

クライアント/サーバー アプリケーションで openssl ライブラリを使用しており、クライアントと公開鍵を共有する必要があります。これはパケットの構造体です:

typedef struct pack {
    char op[10];
    char message[1024];
    int id;
}packet;

そして、これは公開鍵を抽出してメッセージフィールドに入れる方法です:

packet *send_pack
RSA *rsa,
const unsigned char *my_public_key;

my_public_key = malloc(1024);
send_pack = (packet*) malloc(sizeof (packet));
rsa = RSA_new();
rsa = RSA_generate_key(1024, 17, NULL, NULL);
i2d_RSAPublicKey(rsa, &my_public_key);
printf("my public key: %X\n", (unsigned int)my_public_key);
strcpy(send_pack->message, my_public_key);
printf("field message of send pack %X", (unsigned int)send_pack->message );

...

ただし、2 つの printf は 2 つの類似した値を出力しますが、同じではありません (たとえば、最初の printf は A0B9092 を返し、2 番目の A0B944 を返します)。どうしたの ?

4

1 に答える 1

1

複数の問題があります。

  • コンテンツの代わりにポインターアドレスを印刷しています
  • strcpy0 で終わる文字列が必要なため、キーを間違ってコピーしています

i2d_RSAPublicKey最初の問題については、無視している長さを返すことに注意してください。したがって、次を印刷する必要があります。

int len = i2d_RSAPublicKey(...);
for (i = 0; i < len; i++)
    printf("%02x", my_public_key[i]);

2 番目の部分では、memcpy代わりに次を使用します。

memcpy(send_pack->message, my_public_key, len);
于 2012-08-24T10:05:22.107 に答える