2011-09-21 69 views
1

在PHP中,哪个(可解密的)加密算法是最安全的?
我的意思是MD5不能解密回来吗?
我发现与mcrypt(然后用base64再次编码)的完整工作类,它可以加密和解密回
PHP:最安全(可解密)的加密方法?

样品mcrypt的(加密):

function encrypt($value) { 
    if(!$value){return false;} 
    $text = $value; 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->key, $text, MCRYPT_MODE_ECB, $iv); 
    return trim($this->safe_b64encode($crypttext)); 
} 

然后使用Base64再次编码:

function safe_b64encode($string) { 
    $data = base64_encode($string); 
    $data = str_replace(array('+','/','='),array('-','_',''),$data); 
    return $data; 
} 

(。很抱歉的代码只是与加密,没有解密我只是给样品) 但我只想知道是否有其他更安全的算法,然后使用mcrypt。

+0

'base64'是** NO **加密!这是某种编码。因此它根本就不安全。在PHP的'ext/mcrypt'中寻找诸如AES(Rijndael),Blowfish,Serpent,Skipjack等的东西:http://de2.php.net/manual/en/book.mcrypt.php –

+0

请缩小你的范围问题,因为答案真的取决于你想要加密的东西。只是澄清:MD5不是“加密” - 它是“散列”。它意味着不可逆转。同样,Base64不是“加密” - 它是“编码”。请仔细阅读(维基百科已足够)。你应该知道没有最好的算法 - 都有其优点和缺点。澄清你自己,请 – friendzis

+0

你需要什么? –

回答

1

Base64是不是一个加密算法。

在PHP上,您可以使用mcrypt扩展来安全地加密和解密数据。

Blowfish是PHP支持的最安全(并且是默认的mcrypt)算法之一。

查看支持算法的完整列表here


考虑到改变的问题,这将是新的答案:

mcrypt的是的加密算法。它是一个为不同加密算法提供接口以加密任意数据的库。

在PHP上下文中,这或多或少是你必须加密数据的唯一体面的东西。

+0

我编辑了我的答案 – thwd

+0

然后,对不起我的愚蠢questoin :(正如你所说,mcrypt提供了一个接口到不同的加密算法,所以**加密算法**实际上是在我的代码中使用? –

+1

'MCRYPT_RIJNDAEL_256' < - 那一个 – thwd

2

只是为了阐明:MDSHA算法是HASH算法:他们计算给定数据的校验和,以便您以后可以验证它没有被更改。可以这样想:

您的数据是592652。你想校验知道这个处理不当被改变的话,你做这样的事情:

5+9+2+6+5+2=29 
2+9=11 
1+1=2 

现在,当你要检查你的数据,你可以把它通过同样的计算,看看你是否得到相同的结果:

但是没有办法采取的是2,回到你原来的数据:592652。

当然,真正的计算哈希算法是不同的,这个例子只是一个总体思想的示范。这不是加密。对于加密,AES算法家族现在可能是最安全的,我会去AES-512。正如其他人指出,RIJNDAEL应该是首选。 (AES和Rijndael可交换使用,它们几乎是相同的:Rijndael是算法的名称,而AES是采用Rijndael作为其方法的加密标准的名称)。

+1

谢谢你向我提供了我过去2年来一直在寻找的东西 –