我使用以下类来加密和解密字符串。创建两个相同的字符串后,我对其中一个字符串进行加密,然后对其进行解密。但是,解密后的字符串不再等于其孪生字符串(即使它们在转换后的文本形式中看起来相同)。此外,在使用加密解密的字符串及其孪生并将它们转换为十六进制使用 bin2hex 之后,我发现它们看起来相似,只是之前加密的字符串末尾的加法数为零。
有人可以指出我做错了什么吗?先感谢您。
类 proCrypt {
public function __set( $name, $value )
{
switch( $name)
{
case 'key':
case 'ivs':
case 'iv':
$this->$name = $value;
break;
default:
throw new Exception( "$name cannot be set" );
}
}
/**
*
* Gettor - This is called when an non existant variable is called
*
* @access public
* @param string $name
*
*/
public function __get( $name )
{
switch( $name )
{
case 'key':
return 'abcd';
case 'ivs':
return mcrypt_get_iv_size( MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB );
case 'iv':
return mcrypt_create_iv( $this->ivs );
default:
throw new Exception( "$name cannot be called" );
}
}
/**
*
* Encrypt a string
*
* @access public
* @param string $text
* @return string The encrypted string
*
*/
public function encrypt( $text )
{
// add end of text delimiter
$data = mcrypt_encrypt( MCRYPT_RIJNDAEL_128, $this->key, $text, MCRYPT_MODE_ECB, $this->iv );
return bin2hex($data);
}
/**
*
* Decrypt a string
*
* @access public
* @param string $text
* @return string The decrypted string
*
*/
public function decrypt( $text )
{
$text = pack("H*" , $text);
return mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $this->key, $text, MCRYPT_MODE_ECB, $this->iv );
}
} // 类结束