我有一个要求,我需要通过GET将字符串从一个地方移动到另一个地方。例如 example.com?string=ENCRYPTED_STRING
是否有算法或其他方法来加密字符串,因此它是URL安全的?
我的意思是它不会有像=或&这样的字符。 ...
我尝试过使用AES-256-CBC的openssl,但没有运气。
数据并不是非常敏感,但我宁愿在某种程度上对其进行模糊处理。
答案 0 :(得分:1)
哦,嘿,我实际上已经在我的一个应用程序中完成了这个。我的代码看起来很不一样(因为我的自定义工具,它是一个单行),但基本上像这样(使用defuse/php-encryption):
SettingsControl
进一步阅读:
base64_encode()
http_build_query()
urlencode()
(如果您不想使用use \Defuse\Crypto\Crypto;
$url = "/my/endpoint?".http_build_query([
'something' => base64_encode(
Crypto::encrypt('my_secret_info', CRYPTO_SECRET_KEY)
)
]);
// Then you can either use $url in header('Location: '.$url) or in an HTML link safely.
)脚注:如果您(或其他任何人)需要简短加密的网址参数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));
}