Cryptography Tutorials - Herong's Tutorial Examples - v5.42, by Herong Yang
Block Padding in mcrypt
This section describes the padding schema used in PHP mcrypt library for MCRYPT_MODE_ECB and MCRYPT_MODE_CBC modes. mcrypt simply pads 0x00 to the end of the plaintext.
If you use mcrypt DES to encrypt a stream of bytes in MCRYPT_MODE_CFB or MCRYPT_MODE_OFB mode, you don't need to worry about padding the byte stream. Because MCRYPT_MODE_CFB and MCRYPT_MODE_OFB are 1-byte ciphers.
But if you use mcrypt DES to encrypt a stream of bytes in MCRYPT_MODE_ECB or MCRYPT_MODE_CBC mode, you have to worry about padding the byte stream. Because MCRYPT_MODE_ECB and MCRYPT_MODE_CBC are 8-byte ciphers.
"mycypt" offers a very simple padding method which simply adds 0x00 to the end of the plaintext message to make it multiples of 8 bytes (64 bits) for MCRYPT_MODE_ECB and MCRYPT_MODE_CBC modes.
This will create problems if you encrypt a message with PHP mcrypt in MCRYPT_MODE_ECB mode and send it to someone else who tries to decrypt it with a JDK JCE program. Because the JDK JCE package uses the DES/ECB/PKCS5Padding mode by default. The last block will fail to decrypt because the padding schema is different.
So if you want exchange DES encrypted messages with a Java programmer, you need to handle the PKCS5Padding padding yourself as part of your PHP script. See the PKCS5Padding schema section for detailed information.
Table of Contents
Introduction to AES (Advanced Encryption Standard)
DES Algorithm - Illustrated with Java Programs
DES Algorithm Java Implementation
DES Algorithm - Java Implementation in JDK JCE
DES Encryption Operation Modes
►PHP Implementation of DES - mcrypt
mcrypt DES Encryption Testing Program
Blowfish - 8-Byte Block Cipher
Secret Key Generation and Management
Cipher - Secret Key Encryption and Decryption
RSA Implementation using java.math.BigInteger Class
Introduction of DSA (Digital Signature Algorithm)
Java Default Implementation of DSA
Private key and Public Key Pair Generation
PKCS#8/X.509 Private/Public Encoding Standards
Cipher - Public Key Encryption and Decryption
OpenSSL Introduction and Installation
OpenSSL Generating and Managing RSA Keys
OpenSSL Generating and Signing CSR
OpenSSL Validating Certificate Path
"keytool" and "keystore" from JDK
"OpenSSL" Signing CSR Generated by "keytool"
Migrating Keys from "keystore" to "OpenSSL" Key Files
Certificate X.509 Standard and DER/PEM Formats
Migrating Keys from "OpenSSL" Key Files to "keystore"