在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。
答案 0 :(得分:4)
你可能想要MCRYPT_RIJNDAEL_256。块大小为128,192和256位的Rijndael是AES的推广,它只支持128位的块大小。
请参阅:http://us.php.net/manual/en/mcrypt.ciphers.php和http://us.php.net/manual/en/book.mcrypt.php
答案 1 :(得分:3)
只是为了澄清:MD
和SHA
算法是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)