OpenSSL を使用して C で単純な暗号化ルーチンを作成しようとしていますが、奇妙なことがわかりました。私は C の第一人者でも、OpenSSL の専門家でもありません。だから私は間違いを犯したかもしれません。
機能は次のとおりです
char *rsa_encrypt(char *data)
{
const char xponent_in_hex[] = "010001";
const char modulus_in_hex[] = "D0BA16F11907E7B0819705A15264AC29BEE9F1EC5F22642992
D3E27100B7F212864A624A12FFB6D531712B0B0225AAD0C2E313D077A7DB2A5A33483EEFF41A9D";
BIGNUM *xponent = NULL;
BIGNUM *modulus = NULL;
BN_hex2bn(&xponent, xponent_in_hex);
BN_hex2bn(&modulus, modulus_in_hex);
RSA *rsa = RSA_new();
rsa->e = xponent;
rsa->n = modulus;
rsa->iqmp = NULL;
rsa->d = NULL;
rsa->p = NULL;
rsa->q = NULL;
char encoded[512] = { 0 };
RSA_public_encrypt(
strlen(data),
(const unsigned char *)data,
(unsigned char *)encoded,
rsa,
RSA_PKCS1_OAEP_PADDING
);
RSA_free(rsa);
return (encoded);
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%s\n", base64_encode(rsa_encrypt("ABC")));
printf("%s\n", base64_encode(rsa_encrypt("ABC")));
printf("%s\n", base64_encode(rsa_encrypt("ABC")));
}
同じデータに対してその関数を数回呼び出し、呼び出されるたびに異なる値を生成します。作成されたRSA 構造体の指数と係数は定数であり、入力データは各呼び出しで同じであるため、明らかに間違っています。
では、なぜRSA_public_encrypt
そのように振る舞うのでしょうか。
指数と係数に基づいて RSA 暗号化の公開鍵を生成するにはどうすればよいですか?
そして、私はどこで間違いを犯しましたか?