PHP:最安全(可解密)的加密方法?

时间:2011-09-21 10:32:33

标签: php encryption

在PHP中,哪种(可解密的)加密算法最安全? 我的意思是MD5无法解密回来了吗? 我找到了mcrypt的完整工作类(然后再用base64编码),可以加密和解密

示例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。

3 个答案:

答案 0 :(得分:4)

你可能想要MCRYPT_RIJNDAEL_256。块大小为128,192和256位的Rijndael是AES的推广,它只支持128位的块大小。

请参阅:http://us.php.net/manual/en/mcrypt.ciphers.phphttp://us.php.net/manual/en/book.mcrypt.php

答案 1 :(得分:3)

只是为了澄清:MDSHA算法是HASH算法:它们计算给定数据的校验和,以便稍后验证它是否已被更改。可以这样想:

您的数据为592652。你想要一个校验和知道它没有被改变,所以,你做了类似的事情:

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

现在,当您想要检查数据时,可以通过相同的计算,看看是否得到相同的结果:

  

2

然而,没有办法取得那个2并取回原始数据:592652。

当然,实际计算哈希算法是不同的,这个例子只是一般概念的演示。这不是加密。

至于加密,AES系列算法最近可能是最安全的,我会选择AES-512。正如其他人所说,RIJNDAEL应该是首选。 (AES和Rijndael可以交换使用,它们几乎是一样的:Rijndael是算法的名称,而AES是采用Rijndael作为其方法的加密标准的名称)。

答案 2 :(得分:1)

Base64不是加密算法。

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

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

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


鉴于问题已经改变,这将是新答案:

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

在PHP环境中,这或多或少是加密数据所必需的唯一体面。