Unable to exchange data encrypted with AES-256 between Java and PHP

前端 未结 4 1564
陌清茗
陌清茗 2020-12-04 22:51

My problem is: what I encrypt in Java I can decrypt perfectly in Java, but PHP mcrypt can\'t decrypt. What I encrypt with mcrypt I can decrypt with

4条回答
  •  -上瘾入骨i
    2020-12-04 23:35

    Please see here:

    • Difference in PHP encryption from iOS and .NET

    • AES Encrypt in C#, decrypt in PHP

    • DES Encryption in PHP and C#

    The problem you're encountering is a padding-issue. I don't know Java, but AES/ECB/PKCS5Padding looks like you're using a PKCS#5 (that's essentially the same as PKCS#7) padding while PHP natively only support NULL-padding. That's what PKCS#5/7 does:

    Pad the input with a padding string of between 1 and 8 bytes to make the total length an exact multiple of 8 bytes. The value of each byte of the padding string is set to the number of bytes added - i.e. 8 bytes of value 0x08, 7 bytes of value 0x07, ..., 2 bytes of 0x02, or one byte of value 0x01.

    So the PHP code to do the padding right is trivial:

    $blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $padding   = $blockSize - (strlen($data) % $blockSize);
    $data      .= str_repeat(chr($padding), $padding);
    

提交回复
热议问题