我正在对一些数据进行encryption,并在系统之间的srcipt运行时间中获得大不相同的结果。
在win7机器上运行我的algorithm,encryption完成3-8千分之一秒。
Linux上的相同代码(ubuntu11和debian6盒)需要7到35秒。
这是不能接受我的需要,并想知道如果任何一个人可以摆脱任何光。
相关代码如下:
<?php class MyEncryption { public function __construct( $keyData ) { $this->_encryptInit( $keyData ); } private function _encryptInit( $keyData ) { $this->ch = mcrypt_module_open('rijndael-256', '', MCRYPT_MODE_ECB , ''); $vector = mcrypt_create_iv (mcrypt_enc_get_iv_size( $this->ch ), MCRYPT_DEV_RANDOM ); $keySize = mcrypt_enc_get_key_size( $this->ch ); $key = substr( hash('SHA512', $keyData . $keySize ), 0, $keySize ); mcrypt_generic_init( $this->ch, $key, $vector ); } private function _encryptClose() { mcrypt_generic_deinit( $this->ch ); mcrypt_module_close( $this->ch ); } public function encryptData( $data ) { $safeData = mcrypt_generic( $this->ch, $data ); $this->_encryptClose(); return $safeData; } public function decryptData( $safeData ) { $data = mdecrypt_generic( $this->ch, $safeData ); $this->_encryptClose(); return $data; } }
运行这个代码是我看到的差异:
<?php echo microtime(). ' -- Start || '.PHP_EOL; $enc = new MyEncryption( 'astring' ); echo microtime(). ' -- Init || '.PHP_EOL; $data = array( 'dob'=>'1970-01-01','creditcardno'=>'4000123412345678' ); $safeData = $enc->encryptData( json_encode( $data ) ); echo microtime(). ' -- Encrypted || '.PHP_EOL; echo ' == ' . $safeData . ' == '.PHP_EOL; $dec = new MyEncryption( 'astring' ); echo microtime(). ' -- Init2 || '.PHP_EOL; $data = json_decode( $dec->decryptData( trim( $safeData ) ) ); echo microtime(). ' -- Decrypted || '.PHP_EOL; echo ' == ' . $data . ' == '.PHP_EOL;
任何指针将非常感激的欢迎..
找到解决方案!
有点奇怪,但我明白为什么这样。
这是用于生成基于MCRYPT_DEV_RANDOM的随机数据的方法。
答案(或至少是对我有用)在于这篇文章
小故事使用MCRYPT_DEV_URANDOM来代替。
* nix块上的MCRYPT_DEV_RANDOM,直到熵池中有足够的数据可用。 如果没有任何的话,URANDOM会自己做。