Pure-PHP implementation of Rijndael.
Uses mcrypt, if available/possible, and an internal implementation, otherwise.
PHP version 5
If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from {@link self::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example, does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256. {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224 are first defined as valid key / block lengths in {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}: Extensions: Other block and Cipher Key lengths. Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
{@internal The variable names are the same as those in {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
Here's a short example of how to use this library:
<?php
include 'vendor/autoload.php';
$rijndael = new \phpseclib\Crypt\Rijndael();
$rijndael->setKey('abcdefghijklmnop');
$size = 10 * 1024; $plaintext = ''; for ($i = 0; $i < $size; $i++) { $plaintext.= 'a'; }
echo $rijndael->decrypt($rijndael->encrypt($plaintext)); ?>
Rijndael | Pure-PHP implementation of Rijndael. |