在PHP中加密字符串,其中输出是URL安全的

时间:2015-10-22 20:43:03

标签: php encryption openssl

我有一个要求,我需要通过GET将字符串从一个地方移动到另一个地方。例如 example.com?string=ENCRYPTED_STRING

是否有算法或其他方法来加密字符串,因此它是URL安全的?

我的意思是它不会有像=或&这样的字符。 ...

我尝试过使用AES-256-CBC的openssl,但没有运气。

数据并不是非常敏感,但我宁愿在某种程度上对其进行模糊处理。

3 个答案:

答案 0 :(得分:1)

哦,嘿,我实际上已经在我的一个应用程序中完成了这个。我的代码看起来很不一样(因为我的自定义工具,它是一个单行),但基本上像这样(使用defuse/php-encryption):

SettingsControl

进一步阅读:

脚注:如果您(或其他任何人)需要简短加密的网址参数read this answer instead。 (我知道你要求的不是什么,但万一有人发现这个问题多年了......)

答案 1 :(得分:0)

我必须做完全一样的事情。

我的解决方案是使用openssl_encrypt($str, "AES-128-CBC", $key)加密字符串。

然后使用url_encode($str)发送URL。

目标页面使用openssl_decrypt($str, "AES-128-CBC", $key)解码数据

答案 2 :(得分:-1)

下面的代码允许您加密(alpha / num)并解密字符串。但是你需要安装Mcrypt php模块才能运行它。

static public function encrypt($text){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);                                                                           
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = "useasuperkey";

    return (bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv)));
}

static public function decrypt($text){
    $len = strlen($text);  
    $text = pack("H" . $len, $text);
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);                                                                           
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = "useasuperkey";

    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv));
}