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


PHP simple string encryption and decryption

在PHP中除了mcrypt()有一个简单的函数可以将encryptdecrypt转换为字符串吗

我正在尝试下面的代码,但是对于我想要做的事情来说,这太多了。

我正试图加密与URL一起发送的页码,因此用户将无法通过简单地更改浏览器位置栏中的页码来访问页面。我的页码也有一些其他的数据,我不想让用户看到。

的例子: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')

MCrypt不会将这些==字符添加到字符串中,但base 64编码会。可以简单地移除它们。只要确保base64字符串是4个字符的倍数,在接收字符串时再次添加它们。

base64默认可以包含'/'和'+'字符(取决于输入)。将它们替换为URL安全的-_字符。

代码显示MCRYPT_RIJNDAEL_256而不是 AES;它是256位块大小的Rijndael。使用MCRYPT_RIJNDAEL_128 ( AES)会更好。这仍然允许代码加密最多16个字符的数字值,并且它将减小输出大小。

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

$salt值实际上是键值,最好这样命名以避免混淆