Php 生成可直接在URL中使用的加密字符串

Php 生成可直接在URL中使用的加密字符串,php,encryption,Php,Encryption,有时在我的表单中,我发现我自己在使用隐藏的输入,其中包含一些客户不需要知道的值。(实际上,即使他知道这不是一个大问题,但我不喜欢那样……这样我就不需要非常安全和复杂的加密工具了) 基于这里的一些答案(),我构建了下一个类 class Crypto { const ENCRYPT_METHODE = "AES-256-CBC"; const SECRET_HASH = "25c6c7ff35b9979b151f2136cd13b0ff"; private sta

有时在我的表单中,我发现我自己在使用隐藏的输入,其中包含一些客户不需要知道的值。(实际上,即使他知道这不是一个大问题,但我不喜欢那样……这样我就不需要非常安全和复杂的加密工具了)

基于这里的一些答案(),我构建了下一个类

class Crypto
{

    const ENCRYPT_METHODE = "AES-256-CBC";
    const SECRET_HASH     = "25c6c7ff35b9979b151f2136cd13b0ff";

    private static function GetIV()
    {

        if (empty($_SESSION['crypto']['iv'])) {
            $iv_size                  = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
            $_SESSION['crypto']['iv'] = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        }
        return $_SESSION['crypto']['iv'];
    }

    public static function Encrypt($value)
    {
        return openssl_encrypt($value,
            self::ENCRYPT_METHODE,
            self::SECRET_HASH,
            0,
            self::GetIV());
    }

    public static function Decrypt($value)
    {
        return openssl_decrypt($value,
            self::ENCRYPT_METHODE,
            self::SECRET_HASH,
            0,
            self::GetIV());
    }
}
。。。到目前为止,
Crypto
对隐藏输入很有效,但有时它会生成需要编码的字符串,然后再将其放入url

那么,如何改进这门课以满足我的需要呢?
或者还有其他更好的加密解密字符串的方法吗


编辑
与其尝试生成有效的URL字符串值(直接使用
openssl\u decrypt
),不如将
urlencode
/
urldecode
添加到方法中就可以了,这就是加密方法的工作原理:

class Crypto{

     // ...

    public static function Encrypt($value){
        $encrypted = openssl_encrypt($value,
                               self::ENCRYPT_METHODE,
                               self::SECRET_HASH,
                               0,
                               self::GetIV());

        return urlencode($encrypted);
    }

    public static function Decrypt($value){
        $value = urldecode($value);
        return openssl_decrypt($value,
                               self::ENCRYPT_METHODE,
                               self::SECRET_HASH,
                               0,
                               self::GetIV());
    }
}

我认为它在任何地方都可以正常工作,多亏了您可以使用
url\u encode()
确保每个字符都可以传递到url,并
urldecode()
获取字符

您可以使用
url\u encode()
确保每个字符都可以传递到url,并使用
urldecode()
获取字符

你能告诉我们你是如何把这些值放到URL的吗?@thebluefox就是这样!!我试图了解您是如何在HTML中使用类中的方法的。我知道URL是什么样子。如果您只是想对不太了解的“通用”用户隐藏该值,只需使用
base64\u encode()
。如果你需要更强大的加密,你是在一个非常好的方式。注意不推荐使用的函数和过时的openssl版本。在尝试有关加密/openssl的教程时,请从2016/2017年开始查找,较旧的东西可能会使用不好的做法。来自德国的Dan感谢,
base64_encode
它看起来足以满足我的需要,我找到了另一种方法使其适用于URL:您能告诉我们如何将这些值放入URL吗?@thebluefox就是这样!!我试图了解您是如何在HTML中使用类中的方法的。我知道URL是什么样子。如果您只是想对不太了解的“通用”用户隐藏该值,只需使用
base64\u encode()
。如果你需要更强大的加密,你是在一个非常好的方式。注意不推荐使用的函数和过时的openssl版本。在尝试有关加密/openssl的教程时,从2016/2017年开始查找,旧的东西可能会使用不好的做法。Danfrom Germany感谢,
base64_encode
它看起来足以满足我的需要,我找到了另一种方法使其适用于URL:我使用的东西知道,但这会影响加密值,所以它不会被正确加密?你知道其他加密/解密字符串的简单方法吗?对于URL?不,一根绳子?我还没有搜索。完美:)然后您可以验证此答案并将主题标记为已解决;)我使用的是知道的,但这会影响加密值,因此不会正确加密?您知道加密/解密字符串的其他简单方法吗?对于URL?不,一根绳子?我还没有搜索。完美:)然后您可以验证此答案并将主题标记为已解决;)