【问题标题】:PHP: Most secure (decryptable) encryption method?PHP:最安全(可解密)的加密方法?
【发布时间】:2011-09-21 10:32:32
【问题描述】:

在 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 更安全的算法。

【问题讨论】:

  • base64 是 NO 加密!这是某种编码。因此它根本不安全。在ext/mcrypt 中查找 AES (Rijndael)、Blowfish、Serpent、Skipjack 等内容,对于 PHP:de2.php.net/manual/en/book.mcrypt.php
  • 请缩小你的问题,因为答案真的取决于你想要什么加密。只是为了澄清:MD5 不是“加密” - 它是“散列”。这意味着不可逆转。同样,Base64 不是“加密”——它是“编码”。请阅读(维基百科就足够了)这三个术语。你应该知道没有最好的算法 - 都有其优点和缺点。澄清一下,请
  • 你需要它做什么?
  • @Stefan 抱歉,我现在已经编辑了问题。
  • @Col。弹片有什么用? @_@ 你不需要在你的代码中使用任何加密吗??

标签: php encryption


【解决方案1】:

您可能需要 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

【讨论】:

    【解决方案2】:

    澄清一下: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 年一直在寻找的东西
    【解决方案3】:

    Base64 不是加密算法。

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

    Blowfish 是 PHP 支持的最安全(也是 mcrypt 中的默认值)算法之一。

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


    鉴于问题发生了变化,这将是新的答案:

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

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

    【讨论】:

    • 那么,对不起我的愚蠢问题:(正如你所说,mcrypt 提供了不同加密算法的接口,那么我的代码中实际使用了哪些加密算法?跨度>
    • MCRYPT_RIJNDAEL_256
    • 哦,谢谢。所以请回答我的原生问题,这种方式安全吗? (或)还有其他更安全的方法吗? (既可以用作加密/解密)
    • 该算法非常可靠。没有好坏之分,但您使用的那一款是众所周知的。
    • 感谢汤姆的知识。我在问上面的问题,因为你说Blowfish 是最安全的。 :) 好的,谢谢老兄。
    猜你喜欢
    • 2011-02-03
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多