PHP简单的字符串加密和解密

时间:2014-06-21 15:10:58

标签: php encryption

除了mcrypt()之外,PHP中是否有一个简单的函数可以encryptdecrypt一个字符串。

我正在尝试下面的代码,但这对我正在尝试的内容来说太过分了。

我正在尝试加密使用网址发送的网页代码,因此用户只需在浏览器位置栏中更改网页编号就无法访问网页。我的页码也有一些其他数据,我不想让用户看到。

实施例: http://www.example.com/p10:05 to http://www.example.com/895f852d22d558esc23

我不需要像下面的代码那样的高级加密和解密。只是在我的例子中可以做的事就足够了。

我不喜欢使用mcrypt的另一个原因是因为它将2 ==添加到字符串的末尾。

$salt ='iodine';

    function simple_encrypt($text)
    {
        global $salt;
        return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
    }

    function simple_decrypt($text)
    {
        global $salt;
        return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
    }

    echo simple_encrypt('Hello')

1 个答案:

答案 0 :(得分:2)

MCrypt不会将这些==字符添加到字符串中,而基本64编码会这样做。可以简单地删除它们。通过在收到字符串时再次添加它们,确保base64字符串是4个字符的倍数。

Base 64默认包含'/'和'+'字符(取决于输入)。 Replace them with URL safe - and _ characters

代码显示MCRYPT_RIJNDAEL_256 AES;它是Rijndael,具有256位块大小。使用MCRYPT_RIJNDAEL_128 - 其中 AES - 会更好。这仍然允许代码加密最多16个字符数值,它将减小输出大小。

如果使用ECB模式,则无需生成IV,因此请删除该方法的该部分。无需为系统随机数生成器添加不必要的工作。

$salt值实际上是键值,更好地命名它以避免混淆。