After commented out the line "EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_NO_PADDING)", it worked well.
However, I still quite understand the usage of "RSA_NO_PADDING". Who could kindly explain this? Thanks, Jared, (韦煜) Software developer Interested in open source software, big data, Linux ________________________________ From: openssl-users <openssl-users-boun...@openssl.org> on behalf of Yu Wei <yu20...@hotmail.com> Sent: Thursday, March 23, 2017 1:20:42 AM To: openssl-users@openssl.org Subject: [openssl-users] One question about RSA decrypt with private key Hi guys, I generated RSA private key and public key as below, openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 openssl rsa -pubout -in pri.key -out pub.key And encrypted text file as below, openssl pkeyutl -encrypt -pubin -inkey ~/pub.key -in ~/1.txt -out ~/1e.txt Then I wrote below program to decrypt the encryted file. However, it seemed that decrypt didn't work as expected. #include <openssl/evp.h> #include <openssl/rsa.h> #include <openssl/pem.h> #include <openssl/err.h> #include <openssl/conf.h> #include <iostream> using namespace std; void cleanup() { EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); ERR_free_strings(); } int main(int argc, char** argv) { ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); OPENSSL_config(nullptr); cout<<"Initialize crypto library done"<<endl; EVP_PKEY * key = EVP_PKEY_new(); if (key == nullptr) { cout<<"Failed to contruct new key"<<endl; return 1; } FILE * fpri = nullptr; fpri = fopen("/home/stack/pri.key", "r"); if (fpri == nullptr) { cout<<"Failed to load private key"<<endl; return 1; } key = PEM_read_PrivateKey(fpri, &key, nullptr, nullptr); if (key == nullptr) { std::cout<<"Read private key failed"<<endl; return 1; } cout<<"load private key successfully"<<endl; EVP_PKEY_CTX *ctx = nullptr; ctx = EVP_PKEY_CTX_new(key, nullptr); EVP_PKEY_decrypt_init(ctx); EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_NO_PADDING); size_t outlen = 0, inlen = 0; unsigned char * out = nullptr, * in = nullptr; char buf[1024]; FILE * fe = nullptr; fe = fopen("/home/stack/1e.txt", "r"); size_t len = fread(buf, 1, sizeof(buf), fe); cout<<"data input length is "<<len<<endl; EVP_PKEY_decrypt(ctx, NULL, &outlen, in, inlen); cout<<"outlen is "<<outlen<<endl; out = (unsigned char*)OPENSSL_malloc(outlen); EVP_PKEY_decrypt(ctx, out, &outlen, in, inlen); cout<<"decrypted data "<<out<<endl; cleanup(); return 0; } When executing the code, the result is as below, [stack@agent ~]$ ./test Initialize crypto library done load private key successfully data input length is 256 outlen is 256 decrypted data Is there anything missed? Thanks, Jared, (韦煜) Software developer Interested in open source software, big data, Linux
-- openssl-users mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users