Simple AES encryption decryption with openssl library in C

前端 未结 4 1196
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-10 07:45

I want to encrypt a struct containing few String and then decrypt it. I tried following code. The original code is found from the web and it was working perfectly. I change

4条回答
  •  情歌与酒
    2020-12-10 08:19

    At least I also think it is not a good practise to use struct and sizeof(a_struct_type) here.

    The actual binary sequence of the struct USR_TICKET and the result of sizeof will vary according to different padding and byte alignment implementation.

    Here is the test result.

    1) Firstly, I download the latest openssl1.0.2c and build it, and test the code here with this library on OS X 10.10.3, the code works fine.

    2) And I tried to run the test for 5 times. Each time, even the original plain text will changed due to padding of struct(on my OS, the last 4 bytes will be changed every time).

    3) So,the same input to the struct produced different plain text, which finally produced different cipher text. The user might be confused by the different cipher text output, when they try to encrypt the same input info(here raving, 1, 2015-6-25) with the same key and iv.

    4) Furthermore, just change the struct internal definition, which will produce the same concern in description (3).

    typedef struct ticket { /* test field */
    int ticketId;
    char username[19]; // here try to change from 20 to 19
        char date[20]; // here try to change from 20 to other size
    } USR_TICKET;
    

    PS. Some outputs result from above description(2),

    Output1:

    Give a key length [only 128 or 192 or 256!]:
    128
    Username - ravinda
    Ticket Id - 1
    Date - 2015-06-25
    original:   01 00 00 00 72 61 76 69 6E 64 61 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 31 35 2D 30 36 2D 32 35 00 00 00 00 00 00 58 BB 3A 50 
    encrypt:    BA 32 86 CC 71 55 2F 73 ED A1 C9 DE 00 32 1A 20 D9 A5 16 52 8A CD F0 F7 38 04 76 38 5A 47 35 3B A3 07 97 41 C4 C2 05 53 74 93 91 26 7E DE 40 47 
    decrypt:    01 00 00 00 72 61 76 69 6E 64 61 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 31 35 2D 30 36 2D 32 35 00 00 00 00 00 00 58 BB 3A 50 
    Username - ravinda
    Ticket Id - 1
    Date - 2015-06-25
    

    Output2:

    Give a key length [only 128 or 192 or 256!]:
    128
    Username - ravinda
    Ticket Id - 1
    Date - 2015-06-25
    original:   01 00 00 00 72 61 76 69 6E 64 61 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 31 35 2D 30 36 2D 32 35 00 00 00 00 00 00 58 0B 10 5A 
    encrypt:    BE 60 0F FC 17 A3 42 4A 95 7C 39 DB BF 2C BA 59 42 DC 0C AD B2 20 76 6A 04 E3 DE 11 3E D0 AF 88 A5 B9 D2 25 D4 AE F0 B7 82 9F 13 39 80 39 61 9D 
    decrypt:    01 00 00 00 72 61 76 69 6E 64 61 00 00 00 00 00 00 00 00 00 00 00 00 00 32 30 31 35 2D 30 36 2D 32 35 00 00 00 00 00 00 58 0B 10 5A 
    Username - ravinda
    Ticket Id - 1
    Date - 2015-06-25
    

提交回复
热议问题