private $rngInstance = null;
/**
- * Salt for hashing operations
+ * Instance of the crypto stream
*/
- private $salt = '';
+ private $cryptoStreamInstance = null;
/**
- * Seperator on many places
+ * Salt for hashing operations
*/
- private $seperator = '|';
+ private $salt = '';
/**
* Protected constructor
// Initialize the hasher
$cryptoInstance->initHasher();
+ // Attach a crypto stream
+ $cryptoInstance->attachCryptoStream();
+
// Return the instance
return $cryptoInstance;
}
if (is_null(self::$selfInstance)) {
// Then get a new one
self::$selfInstance = self::createCryptoHelper();
- }
+ } // END - if
// Return the instance
return self::$selfInstance;
}
+ /**
+ * Attaches a crypto stream to this crypto helper by detecting loaded
+ * modules.
+ *
+ * @return void
+ */
+ protected function attachCryptoStream () {
+ // Do we have mcrypt loaded?
+ if ($this->isPhpModuleLoaded('mcrypt')) {
+ // Then use it
+ $this->cryptoStreamInstance = ObjectFactory::createObjectByName('McryptStream', array($this->rngInstance()))
+ } else {
+ // If nothing works ...
+ $this->cryptoStreamInstance = ObjectFactory::createObjectByName('NullCryptoStream');
+ }
+ }
+
/**
* Initializes the hasher for different purposes.
*
* @return $encrypted Encrypted string
*/
public function encryptString ($str) {
- // Init crypto module
- $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
-
- // Get key
- if ($this->getConfigInstance()->getConfigEntry('crypt_fixed_salt') == 'Y') {
- $key = md5($this->rngInstance->getFixedSalt());
- } else {
- $key = md5($this->rngInstance->getExtraSalt());
- }
-
- // Add some "garbage" to the string
- switch ($this->rngInstance->randomNumber(0, 8)) {
- case 0:
- $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20));
- break;
-
- case 1:
- $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20));
- break;
-
- case 2:
- $garbageString = crc32($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20));
- break;
-
- case 3:
- $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20));
- break;
-
- case 4:
- $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20));
- break;
-
- case 5:
- $garbageString = md5($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20));
- break;
-
- case 6:
- $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . crc32($this->rngInstance->randomString(20));
- break;
-
- case 7:
- $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . md5($this->rngInstance->randomString(20));
- break;
-
- case 8:
- $garbageString = sha1($this->rngInstance->randomString(10)) . $this->seperator . base64_encode($str) . $this->seperator . sha1($this->rngInstance->randomString(20));
- break;
- }
-
- // Encrypt the string
- $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $garbageString, MCRYPT_MODE_ECB, $iv);
+ // Encrypt the string through the stream
+ $encryted = $this->cryptoStreamInstance->encryptStream($str);
// Return the string
return $encrypted;
* @return $str The unencrypted string
*/
public function decryptString ($encrypted) {
- // Init crypto module
- $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
- $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
-
- // Get key
- if ($this->getConfigInstance()->getConfigEntry('crypt_fixed_salt') == 'Y') {
- $key = md5($this->rngInstance->getFixedSalt());
- } else {
- $key = md5($this->rngInstance->getExtraSalt());
- }
-
- // Decrypt the string
- $garbageString = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_ECB, $iv);
-
- // Get the real string out
- $strArray = explode($this->seperator, $garbageString);
-
- // Does the element count match?
- assert(count($strArray) == 3);
-
- // Decode the string
- $str = base64_decode($strArray[1]);
-
- // Trim trailing nulls away
- $str = rtrim($str, "\0");
+ // Encrypt the string through the stream
+ $str = $this->cryptoStreamInstance->decryptStream($encrypted);
// Return the string
return $str;