首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mcrypt性能

mcrypt性能
EN

Stack Overflow用户
提问于 2012-02-14 20:08:01
回答 1查看 804关注 0票数 6

我对一些数据进行了加密,并在不同系统之间的运行时间上获得了非常不同的结果。

在win7机器上运行我的算法,加密在每秒3-8千秒内完成。

同样的代码在linux (ubuntu11和debian6机器)上需要7到35秒。

这不是真正可以接受的我的需求,我想知道是否有任何好心人可以提供一些启发。

相关代码如下:

代码语言:javascript
复制
<?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;
    }
}

运行这段代码是我看到差异的地方:

代码语言:javascript
复制
<?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;

我们非常欢迎任何人的指点..

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-14 20:45:17

找到解决方案了!!

有点奇怪,但我理解为什么会这样。

它是基于MCRYPT_DEV_RANDOM生成随机数据的方法。

答案(或者至少对我有效的方法)在于this article

简而言之,改用MCRYPT_DEV_URANDOM。

MCRYPT_DEV_RANDOM on *nix块,直到熵池中有足够的数据可用。如果没有URANDOM,URANDOM会将其设为own。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9276592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档