RSAを使用しているクライアント/サーバーソケットに何か奇妙なことがあります。ローカルホストでテストすると、すべてがうまくいきますが、クライアントをPCに配置し、サーバーを他のPCに配置すると、問題が発生します。
クライアントは接続を呼び出した後、サーバーとの公開鍵交換のメソッドを呼び出します。コードのこの部分は正常に機能します。この後、クライアントはサーバーにリクエストを送信します。
strcpy(send_pack->op, "help\n");
RSA_public_encrypt(strlen(send_pack->op), send_pack->op,
encrypted_send->op, rsa_server, padding);
rw_value = write(server, encrypted_send, sizeof (encrypted_pack));
if (rw_value == -1) {
stampa_errore(write_error);
close(server);
exit(1);
}
if (rw_value == 0) {
stampa_errore(no_response);
close(server);
exit(1);
}
printf("---Help send, waiting for response\n");
set_alarm();
rw_value = read(server, encrypted_receive, sizeof (encrypted_pack));
alarm(0);
if (rw_value == -1) {
stampa_errore(read_error);
exit(1);
}
if (rw_value == 0) {
stampa_errore(no_response);
close(server);
exit(1);
}
RSA_private_decrypt(RSA_size(rsa), encrypted_receive->message,
receive_pack->message, rsa, padding);
printf("%s\n", receive_pack->message);
return;
}
ただし、サーバーがサーバー側で受信メッセージを復号化しようとすると、「ヘルプ」文字列は表示されません。これはネット上でのみ発生し、ローカルホストでは同じコードが正常に機能します...
編集:
typedef struct pack1 {
unsigned char user[encrypted_size];
unsigned char password[encrypted_size];
unsigned char op[encrypted_size];
unsigned char obj[encrypted_size];
unsigned char message[encrypted_size];
int id;
}encrypted_pack;
暗号化されたサイズは512で、使用されるパディングはRSA_PKCS1_PADDINGです。