Encryption using AES-128 in Java

前端 未结 2 1685
有刺的猬
有刺的猬 2021-02-04 22:48

I have a problem with ecrypting data using AES-128/ecb/PKCS5Padding+base64. I am using the following code to encrypt my data:

String input = \"{\\\"action\\\":\\         


        
相关标签:
2条回答
  • 2021-02-04 23:02

    You can validate the output from your Java method at the command line using openssl. Java will default your IV to 0 if unspecified.

    The file "enc.txt" contains "6GuKXA6FFR+yMmO8ksAEOLL5e574a5tLob7tt5IG+jk=" [corrected]
    

    Run

    openssl aes-128-ecb -in enc.txt -a -K 4288f0b8060ca1b682bf795f2617cfdc -iv 0 -d
    

    The result is:

    {"action":"getQuestion"}
    

    Try your mcrypt_decrypt with an $iv value of 0.

    0 讨论(0)
  • 2021-02-04 23:09

    The problem isn't with the IV or the padding as I initially thought. It is with how you are handling the key in the PHP code. If you are using the actual string 4288f0b8060ca1b682bf795f2617cfdc as the key passed into mcrypt_encrypt and mcrypt_decrypt then you aren't using the same key as in the Java code. You will need to convert that hex string into bytes. You can do this in the following way:

    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, pack("H*", $key), base64_decode($decrypt), MCRYPT_MODE_ECB, $iv);
    

    Notice the addition of pack("H*", $key) to convert the value. I found that here in the comments for the PHP bin2hex function. This will fix the current problem. You may run into padding troubles when working with data of different lengths since PHP doesn't do PKCS5 padding. See this comment about implementing that missing function. Also, I'd recommend looking into CBC instead of ECB due to ECB's unsuitability and weaknesses for data encryption.

    0 讨论(0)
提交回复
热议问题