Symfony:如何自动加密/解密路由参数?

Mr.*_* B. 7 php encryption symfony

我想自动地对URL /路由中的参数 (例如ID)进行解密/解密,例如:

domain.com/item/show/1应该是这样的domain.com/item/show/uj7hs2.

当前(伪)代码

public function myControllerFunctionAction() {
    // ...
    $id = $this->get('my.crypt')->encrypt($item->getId());
    return $this->redirectToRoute('routeTo_myOtherControllerAction', array('id' => $id));
}

public function myOtherControllerFunctionAction($id) {
    $id = $this->get('my.crypt')->decrypt($id); // decrypt

    $item = $this->get('my.repository')->find($id);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想避免手动加密/解密.

像这样的东西是完美的:

# routing.yml
routeTo_myOtherControllerAction:
    path:     /item/show/{id}
    defaults: { _controller: appBundle:Items:show }
    options:
        crypt_auto: true
        crypt_method: %default_crypt_method%
Run Code Online (Sandbox Code Playgroud)

我找不到任何其他解决方案而不是我的服务.有任何想法吗?

提前致谢!

Sco*_*ski 7

所以,只是为了澄清:

  1. 您想混淆数据库记录ID(即主键)?
  2. 您希望生成的URL很短.

如果您对这两个问题的回答都是"是",请考虑遵循本指南进行URL参数加密.

人们想要做什么

某些加密函数用于确定性地检索ID

人们应该做些什么

使用单独的列

如果我的网址较长,该怎么办?

使用defuse/php-encryption.它提供经过身份验证的加密,是可用性最好的PHP加密库之一.(这也是许可的.)

$decrypted = Crypto::decrypt($urlParameter, $yourKey);
// ... snip ... //
echo "<a href=\"/your/url/?".http_build_query([
    'id' => Crypto::encrypt($yourRowId, $yourKey)
])."\">";
Run Code Online (Sandbox Code Playgroud)