首页 > 解决方案 > Openssl_encrypt 使文本不适合通过 URL 中的 GET 发送到 php

问题描述

我开发了一个 Android 应用程序,使用我公司的活动目录用户/密码登录。当用户输入他的凭据时,密码被加密,我使用 GET 方法将信息发送到一个 php 文件。最近一个用户无法登录,我认为这是由于加密密码上有一个“+”符号。

我尝试禁用加密,他可以登录。所以这肯定是问题所在。

这是我用来加密数据的代码:

function encrypt_new($data) {
    $OPENSSL_CIPHER_NAME = "aes-128-cbc"; //Name of OpenSSL Cipher 
    $CIPHER_KEY_LEN = 16;
    $iv = 'fedcba9876543210';
    $key = '0123456789abcdef';

    if (strlen($key) < $CIPHER_KEY_LEN) {
        $key = str_pad("$key", $CIPHER_KEY_LEN, "0"); //0 pad to len 16
    }

    $encryptedData = base64_encode(openssl_encrypt($data, $OPENSSL_CIPHER_NAME, $key, OPENSSL_RAW_DATA, $iv));

    return $encryptedData;
}

此特定用户的结果 URL 是:

login.php?user=someuser&pwd=r+FjjfugRQXlcURU8eMOCQ==

我能做些什么呢?改变加密方式?我怎么能确定不会再发生这种情况?

标签: phpencryptiongetopenssl

解决方案


推荐阅读