这是mcrypt的安全实现吗?

时间:2013-04-19 11:18:16

标签: php encryption security

我的Web应用程序需要连接到多个FTP服务器,我不希望FTP密码以纯文本格式存储。哈希不是一种选择,因为我需要双向加密。

这就是为什么我在PHP中编写以下类,基于mcrypt文档。它使用mcrypt加密和解密纯文本。密码输入字段用作$ password变量的输入。

当我使用50个字符的强密码加密文本时,我可以认为此加密是安全的吗?

提前谢谢。

class Crypto
{
    private $_iv_size, $_iv;

    function __construct()
    {
        $this->_iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
        $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND);
    }

    function encrypt($plaintext, $password)
    {       
        $key = pack('H*', hash("SHA512", $password, true));
        $plaintext_utf8 = utf8_encode($plaintext);
        $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key,
        $plaintext_utf8, MCRYPT_MODE_CBC, $this->_iv);
        $ciphertext = $this->_iv . $ciphertext;
        $ciphertext_base64 = base64_encode($ciphertext);

        return $ciphertext_base64;
    }

    function decrypt($ciphertext_base64, $password)
    {
        $key = pack('H*', hash("SHA512", $password, true));
        $ciphertext_dec = base64_decode($ciphertext_base64);
        $iv_dec = substr($ciphertext_dec, 0, $this->_iv_size);
        $ciphertext_dec = substr($ciphertext_dec, $this->_iv_size);
        $plaintext_utf8_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key,
        $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);

        return $plaintext_utf8_dec;
    }
}

1 个答案:

答案 0 :(得分:0)

是的,AFAICS(1)代码应该保护有效载荷。

因为您从密码中导出用于加密的密钥,所以只需在代码中实现一次即可(即使它只是一行)。但是明显的WTF就是你通过这一切来解决这个问题,以保护以明文形式发送到FTP服务器的FTP密码!

1 - 证明代码是安全的或无错误的

是不可能的