当前位置: 首页 > 知识库问答 >
问题:

php - 求一个PHP简单的加解密函数,加密后长度比较短,不区分大小写?

姬高扬
2023-05-02

用途:主要用于URL的参数加密!

比如动态URL:xx.com/index.php?cid=1&id=2.html
实现成:xx.com/index.php?pwd=A1B2c3.html

把 cid=1&id=2 进行加密!

要求:
1、加密后的长度尽量短,openssl_decrypt 这个加密后的太长了!
2、加密后的密文要求不区分大小写, A1B2c3和 a1b2c3 都可以,也就是URL的大小写都可以访问。

共有2个答案

谷梁建中
2023-05-02
function xor_encrypt($data, $key) {
    $key_len = strlen($key);
    $data_len = strlen($data);
    $output = '';

    for ($i = 0; $i < $data_len; ++$i) {
        $output .= $data[$i] ^ $key[$i % $key_len];
    }

    return bin2hex($output);
}

function xor_decrypt($data, $key) {
    $key_len = strlen($key);
    $data = hex2bin($data);
    $data_len = strlen($data);
    $output = '';

    for ($i = 0; $i < $data_len; ++$i) {
        $output .= $data[$i] ^ $key[$i % $key_len];
    }

    return $output;
}

function generate_encrypted_url($base_url, $params, $key) {
    $param_str = http_build_query($params);
    $encrypted = xor_encrypt($param_str, $key);
    return $base_url . '?pwd=' . strtolower($encrypted);
}

function parse_encrypted_url($url, $key) {
    $url_parts = parse_url($url);
    parse_str($url_parts['query'], $query_params);
    $encrypted = $query_params['pwd'];
    $decrypted = xor_decrypt(strtolower($encrypted), $key);
    parse_str($decrypted, $original_params);
    return $original_params;
}

$key = 'your_key';
$params = array('cid' => 1, 'id' => 2);
$base_url = 'xx.com/index.php';
$encrypted_url = generate_encrypted_url($base_url, $params, $key);

echo "Encrypted URL: " . $encrypted_url . "\n";

$parsed_params = parse_encrypted_url($encrypted_url, $key);
echo "Decrypted params: ";
print_r($parsed_params);
寇靖
2023-05-02

不必要加密,可以考虑直接存数据库。如果数据量不大,直接存文件也行。


还可以考虑使用 PHP 实现的 hashids,注意,仅限数字。

可以自定义传入定制的字符串编码和长度,并且构造函数的第三个参数就可以传入编码后使用的字符串。

你这里希望不区分大小写,那就去掉大写。生成后随机把其中的字符转换为大写,使用时再统一转为小写再解析就可以了。

 类似资料:
  • PHP语言: 比如字符串 $s = '2_中文'; 加密后得到的加密字符串,必须全部是小写, 不能有特殊符号。 主要是用于做 二级域名。 比如:xxx.abc.com 其中 xxx 就是 $s 加密后的字符串。 程序里面获取 HTTP_HOST,得到 xxx, 然后解密并得到 $s。

  • 本文向大家介绍2个比较经典的PHP加密解密函数分享,包括了2个比较经典的PHP加密解密函数分享的使用技巧和注意事项,需要的朋友参考一下 项目中有时我们需要使用PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 最常见的应用在用户登录以及一些API数据交换的场景。 笔者收录了一些比较经典的PHP加密解密函数代

  • 本文向大家介绍一组PHP加密解密函数分享,包括了一组PHP加密解密函数分享的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍PHP加密解密函数详解,包括了PHP加密解密函数详解的使用技巧和注意事项,需要的朋友参考一下 分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: 解密代码如下: 辅助函数: 使用如下所示: 以上就是为大家分享的php加密解密函数,希望大家喜欢,可以应用到自己的学习中。

  • 本文向大家介绍PHP对称加密函数实现数据的加密解密,包括了PHP对称加密函数实现数据的加密解密的使用技巧和注意事项,需要的朋友参考一下 项目中有一个地方用到了将用户ID加密、传至下个接点进行反解的需求。(原谅我不能透漏太多-_-!),第一个想到的就是康盛Ucenter中的一个函数,后来搜了下,在简明魔法中也找到了个简单的方法,遂整合了下,形成了自己使用的函数。 一、对称加密 发送方将明文使用密钥和

  • 问题内容: 我找到了在PHP中对字符串进行编码/解码的示例。起初它看起来非常好,但是不会起作用:-( 有人知道问题出在哪里吗? 结果是: 加密: 解密: 问题答案: 并且 在您的代码中未定义。查看有效的解决方案( 但不安全! ): 停! 这个例子是 不安全的! 不要使用它! **但是此代码中还有其他问题,使其变得不安全,尤其是使用ECB(这不是_加密_模式,只能在其上定义加密模式的构造块)。