Deriving key and iv for openssl AES decryptionreplicating openssl encryption in .NET?How to create a self-signed certificate with OpenSSLOpenSSL: error occuring in EVP_DecryptFinal_exOpenSSL: bad decrypt 3872:error:0607F08AEncrypt in C# using OpenSSL compatible format, decrypt in PocoPadding errors using OpenSSL for encrypt/decrypt with Keys extracted from Digital CertOpenssl AES 256 CBC Java Decrypt File with saltJava decryption of an encrypted file with openssl aes 256 cbcHow to detect wrong key used to decrypt openssl rc2-64-cbc nopadDecrypting using openssl c/c++ API fails

Is all-caps blackletter no longer taboo?

Fastest way from 10 to 1 with everyone in between

I received a gift from my sister who just got back from

My parents claim they cannot pay for my college education; what are my options?

ISP is not hashing the password I log in with online. Should I take any action?

Has JSON.serialize suppressApexObjectNulls ever worked?

ifnum expanding too much - what is happening?

Why does this Apple //e drops into system monitor when booting?

How effective would a full set of plate armor be against wild animals found in temperate regions (bears, snakes, wolves)?

How can I find out about the game world without meta-influencing it?

Short story about psychologist analyzing demon

Why is my Taiyaki (Cake that looks like a fish) too hard and dry?

What is the theme of analysis?

What does the "titan" monster tag mean?

Opposite of "Concerto Grosso"?

Someone who is granted access to information but not expected to read it

Is it ethical to cite a reviewer's papers even if they are rather irrelevant?

Can Mage Hand be used to indirectly trigger an attack?

Why are backslashes included in this shell script?

What publication claimed that Michael Jackson died in a nuclear holocaust?

How to search for Android apps without ads?

New Site Design!

Is there a term for someone whose preferred policies are a mix of Left and Right?

Why is it bad to use your whole foot in rock climbing



Deriving key and iv for openssl AES decryption


replicating openssl encryption in .NET?How to create a self-signed certificate with OpenSSLOpenSSL: error occuring in EVP_DecryptFinal_exOpenSSL: bad decrypt 3872:error:0607F08AEncrypt in C# using OpenSSL compatible format, decrypt in PocoPadding errors using OpenSSL for encrypt/decrypt with Keys extracted from Digital CertOpenssl AES 256 CBC Java Decrypt File with saltJava decryption of an encrypted file with openssl aes 256 cbcHow to detect wrong key used to decrypt openssl rc2-64-cbc nopadDecrypting using openssl c/c++ API fails






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I am trying AES decrypt operation using openssl functions from C code, but it is failing.



Using openssl command line tools I can decrypt the blob successfully.



openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v


The above command works fine.



But when I use openssl C functions to do the same it fails. The failure seems to be related to wrong key and iv derived from passwd and salt.



unsigned char key[32];
unsigned char iv[16];
EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, key_size, 1, key, iv);


[key_file_buf is an unsigned char buffer read from key_file.]



Hexdump of salt and key_file_buf matches with what is used in command line. Size is also correct.(45 bytes in my case.)



What could be going wrong with EVP_BytesToKey() usage to return wrong key and iv?



I've tried experimenting with iter count values, but none seems to generate the working key and iv. I assume the command line default iter count is 1 anyway.



Also confirmed, if I overwrite what is returned from EVP_BytesToKey() and hard code unsigned char arrays with the working key and iv shown from command line rest of my code works fine and decrypts correctly.



For info, this is how rest of the code looks like (copied from different sources, examples on the web)



EVP_CIPHER_CTX_new();
if(ctx == NULL)
printf("Error with EVP_CIPHER_CTX_new.n");
return;


if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
printf("Error initialising decrypted data.n");
return;


if(1 != EVP_DecryptUpdate(ctx, clear_data, (int *)&interm_len, &enc_data[salt_size], enc_size))
printf("Error decrypting data.n");
return;


*clear_size = interm_len;

if(1 != EVP_DecryptFinal_ex(ctx, clear_data + interm_len, (int *)&interm_len))
printf("Error decrypting data.n");
return;

*clear_size += interm_len;

EVP_CIPHER_CTX_free(ctx);


Can anyone please help?










share|improve this question




























    0















    I am trying AES decrypt operation using openssl functions from C code, but it is failing.



    Using openssl command line tools I can decrypt the blob successfully.



    openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v


    The above command works fine.



    But when I use openssl C functions to do the same it fails. The failure seems to be related to wrong key and iv derived from passwd and salt.



    unsigned char key[32];
    unsigned char iv[16];
    EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, key_size, 1, key, iv);


    [key_file_buf is an unsigned char buffer read from key_file.]



    Hexdump of salt and key_file_buf matches with what is used in command line. Size is also correct.(45 bytes in my case.)



    What could be going wrong with EVP_BytesToKey() usage to return wrong key and iv?



    I've tried experimenting with iter count values, but none seems to generate the working key and iv. I assume the command line default iter count is 1 anyway.



    Also confirmed, if I overwrite what is returned from EVP_BytesToKey() and hard code unsigned char arrays with the working key and iv shown from command line rest of my code works fine and decrypts correctly.



    For info, this is how rest of the code looks like (copied from different sources, examples on the web)



    EVP_CIPHER_CTX_new();
    if(ctx == NULL)
    printf("Error with EVP_CIPHER_CTX_new.n");
    return;


    if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
    printf("Error initialising decrypted data.n");
    return;


    if(1 != EVP_DecryptUpdate(ctx, clear_data, (int *)&interm_len, &enc_data[salt_size], enc_size))
    printf("Error decrypting data.n");
    return;


    *clear_size = interm_len;

    if(1 != EVP_DecryptFinal_ex(ctx, clear_data + interm_len, (int *)&interm_len))
    printf("Error decrypting data.n");
    return;

    *clear_size += interm_len;

    EVP_CIPHER_CTX_free(ctx);


    Can anyone please help?










    share|improve this question
























      0












      0








      0








      I am trying AES decrypt operation using openssl functions from C code, but it is failing.



      Using openssl command line tools I can decrypt the blob successfully.



      openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v


      The above command works fine.



      But when I use openssl C functions to do the same it fails. The failure seems to be related to wrong key and iv derived from passwd and salt.



      unsigned char key[32];
      unsigned char iv[16];
      EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, key_size, 1, key, iv);


      [key_file_buf is an unsigned char buffer read from key_file.]



      Hexdump of salt and key_file_buf matches with what is used in command line. Size is also correct.(45 bytes in my case.)



      What could be going wrong with EVP_BytesToKey() usage to return wrong key and iv?



      I've tried experimenting with iter count values, but none seems to generate the working key and iv. I assume the command line default iter count is 1 anyway.



      Also confirmed, if I overwrite what is returned from EVP_BytesToKey() and hard code unsigned char arrays with the working key and iv shown from command line rest of my code works fine and decrypts correctly.



      For info, this is how rest of the code looks like (copied from different sources, examples on the web)



      EVP_CIPHER_CTX_new();
      if(ctx == NULL)
      printf("Error with EVP_CIPHER_CTX_new.n");
      return;


      if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
      printf("Error initialising decrypted data.n");
      return;


      if(1 != EVP_DecryptUpdate(ctx, clear_data, (int *)&interm_len, &enc_data[salt_size], enc_size))
      printf("Error decrypting data.n");
      return;


      *clear_size = interm_len;

      if(1 != EVP_DecryptFinal_ex(ctx, clear_data + interm_len, (int *)&interm_len))
      printf("Error decrypting data.n");
      return;

      *clear_size += interm_len;

      EVP_CIPHER_CTX_free(ctx);


      Can anyone please help?










      share|improve this question














      I am trying AES decrypt operation using openssl functions from C code, but it is failing.



      Using openssl command line tools I can decrypt the blob successfully.



      openssl enc -d -p -aes-256-cbc -md md5 -in encrypted_file -out clear_file -pass file:./key_file -v


      The above command works fine.



      But when I use openssl C functions to do the same it fails. The failure seems to be related to wrong key and iv derived from passwd and salt.



      unsigned char key[32];
      unsigned char iv[16];
      EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, key_size, 1, key, iv);


      [key_file_buf is an unsigned char buffer read from key_file.]



      Hexdump of salt and key_file_buf matches with what is used in command line. Size is also correct.(45 bytes in my case.)



      What could be going wrong with EVP_BytesToKey() usage to return wrong key and iv?



      I've tried experimenting with iter count values, but none seems to generate the working key and iv. I assume the command line default iter count is 1 anyway.



      Also confirmed, if I overwrite what is returned from EVP_BytesToKey() and hard code unsigned char arrays with the working key and iv shown from command line rest of my code works fine and decrypts correctly.



      For info, this is how rest of the code looks like (copied from different sources, examples on the web)



      EVP_CIPHER_CTX_new();
      if(ctx == NULL)
      printf("Error with EVP_CIPHER_CTX_new.n");
      return;


      if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
      printf("Error initialising decrypted data.n");
      return;


      if(1 != EVP_DecryptUpdate(ctx, clear_data, (int *)&interm_len, &enc_data[salt_size], enc_size))
      printf("Error decrypting data.n");
      return;


      *clear_size = interm_len;

      if(1 != EVP_DecryptFinal_ex(ctx, clear_data + interm_len, (int *)&interm_len))
      printf("Error decrypting data.n");
      return;

      *clear_size += interm_len;

      EVP_CIPHER_CTX_free(ctx);


      Can anyone please help?







      c openssl






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 24 at 9:28









      Dev_001Dev_001

      12




      12






















          1 Answer
          1






          active

          oldest

          votes


















          0














          Figured out finally!
          Should have been



          EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);


          As explained in openssl documentation



          file:pathname
          The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password.



          My passwd file ends in newline 0x0A. So I removed that from the buf for EVP_BytesToKey() and it returns correct key & iv and decrypts fine now.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55322359%2fderiving-key-and-iv-for-openssl-aes-decryption%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            Figured out finally!
            Should have been



            EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);


            As explained in openssl documentation



            file:pathname
            The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password.



            My passwd file ends in newline 0x0A. So I removed that from the buf for EVP_BytesToKey() and it returns correct key & iv and decrypts fine now.






            share|improve this answer



























              0














              Figured out finally!
              Should have been



              EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);


              As explained in openssl documentation



              file:pathname
              The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password.



              My passwd file ends in newline 0x0A. So I removed that from the buf for EVP_BytesToKey() and it returns correct key & iv and decrypts fine now.






              share|improve this answer

























                0












                0








                0







                Figured out finally!
                Should have been



                EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);


                As explained in openssl documentation



                file:pathname
                The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password.



                My passwd file ends in newline 0x0A. So I removed that from the buf for EVP_BytesToKey() and it returns correct key & iv and decrypts fine now.






                share|improve this answer













                Figured out finally!
                Should have been



                EVP_BytesToKey(EVP_aes_256_cbc(), EVP_md5(), salt, key_file_buf, (key_size-1), 1, key, iv);


                As explained in openssl documentation



                file:pathname
                The first line of pathname is the password. If the same pathname argument is supplied to -passin and -passout arguments then the first line will be used for the input password and the next line for the output password.



                My passwd file ends in newline 0x0A. So I removed that from the buf for EVP_BytesToKey() and it returns correct key & iv and decrypts fine now.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 25 at 0:50









                Dev_001Dev_001

                12




                12





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55322359%2fderiving-key-and-iv-for-openssl-aes-decryption%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

                    Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

                    Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript