加密en base64encoded字符串在数据库中不相同

时间:2017-04-20 20:46:07

标签: php encryption pdo mariadb livecode

我已经阅读了很多有关utf-8问题的similair问题的帖子,并尝试了一些但我无法找到原因。

我正在使用livecode,我想将一些字符串加密到数据库。所以我在Livecode中加密然后base64encode然后通过PHP / PDO发送到数据库。 加密 - > base64encode - > base64decode - >在livecode中解密工作正常。

现在当我将base64encoded数据发送到MariaDB数据库时,它会保存它,除了+已成为一个空格。 数据库,表和列都是utf8mb4_unicode_ci。 如果我通过数据库中的phpmyadmin手动将空间更改为+并使用Livecode读出,那么它base64decodes - >解密正确!

这是我用来连接和更新db的php文件:

Objective

你可以看到我在连接文件中尝试了一些字符集

<?php
// the connect.php file
$servername = "localhost";
$username = "blabla";
$password = "blabla";

try {
    //$db = new PDO("mysql:host=$servername;dbname=blabla",$username, $password);
    $db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8", $username, $password);
    //$db = new PDO("mysql:host=$servername;dbname=blabla;charset=utf8mb4", $username, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"));
    // set the PDO error mode to exception
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected successfully";
}
catch(PDOException $e)
{
    echo "Connection failed: " . $e->getMessage();
}
?> 

还试过PDO :: PARAM_LOB 试过VARCHAR VARBIN BLOB,但这没有改变。

我的第一个猜测是Livecode在发布到php文件时做了一些奇怪的事情。但是在发送之前检查变量会在字符串中发送+。所以我真的不知道它出错了。

3 个答案:

答案 0 :(得分:3)

你的问题不在于数据库,因为php是url解码你的base64字符串,它会将'+'转换为''(加上空格)。您需要在发布密码参数之前对其进行urlencode。这是URLEncode的LiveCode文档。

这取决于帖子的内容类型,详细说明here

答案 1 :(得分:0)

我遇到了同样的问题,但是从PHP到livecode我得到的结论是问题是php加密vs livecode加密。如果你尝试没有加密的基本编码,他们会玩得很好。我虽然没有答案,但我记得专家说它与加密二进制文件的“标题”有关。理想情况下,我希望看到这个问题的答案我最终没有加密来绕过它。

答案 2 :(得分:-1)

当我使用base64编码与其他系统(javascript)共享数据时,我总是在编码后使用此代码:

在tEncodedData中用空格替换空格。

LC为base64encode添加空格。当我删除它时,它工作正常。