【问题标题】:PHP XOR encryption failsPHP XOR 加密失败
【发布时间】:2018-05-10 05:10:24
【问题描述】:

我尝试了多种解决方案来对上传的文件进行 XOR 编码,但总是失败。问题基本上是,未加密的文件可以很好地上传到 mysql 数据库:

$fp      = fopen($tempPath, 'r');
$content = fread($fp, filesize($tempPath));
$content = addslashes($content);
fclose($fp);

$encrypted = "";
$key = "123456";

for($i = 0; $i < strlen ($content); $i++)
{
    $encrypted = $encrypted . chr( ord( $content[$i] ) );
}

$sql = "INSERT INTO 
                            doc_files (
                            id, 
                            filedata, 
                            filename, 
                            cryptdata,
                            beschreibung,
                            category,
                            filetype) 
                        VALUES (
                            '$new_guid', 
                            '$encrypted',
                            '$title',
                            '$key',
                            null,
                            '$cat',
                            '$filetype'
                        );";

但是当仅更改编码文件的行(添加 XOR)时,整个脚本会失败并出现 mysql 错误。 mysql 字段格式为longblob。

$encrypted .= chr( ord( $content[$i] ) ^ ord( $key[$i % strlen ($key)] ) );

“您的 SQL 语法有错误;请查看手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 '??ѿG?a????og??3O??o3y q:??eH}?????.,Y?Z>?m?]?Y%?|{?$? ' 在第 12 行"

提前感谢您的帮助

编辑:添加

$encrypted = addslashes($encrypted);

使代码工作。该文件已上传到数据库中,但已增大,因此无法解码。

【问题讨论】:

  • @Raptor ^bitwise XOR operator;您指的是逻辑 XOR 运算符。
  • PHP 中的字符串连接是用点符号. 完成的,而不是用加号+ 完成的,所以连接赋值运算符是.=,而不是+=。此外,如果安全性很重要,与其创建自己的加密方法,不如研究 PHP 的专业级加密扩展,例如 OpenSSL
  • 至于运算符我都试过了,我相信参考文章指定两者都可以使用。对于操作员来说,是的,当恢复到我的代码的先前版本时,这只是一个打字问题。无论如何,它没有在我的数据库中生成任何文件......我很欣赏这些输入
  • 我浏览了很多解决方案,但它们似乎大多不适用于 mysql,或者在处理来自文件上传器的数据时失败。因为这应该是比较字节我猜它是一个逻辑运算符

标签: php xor


【解决方案1】:

能够通过使用准备好的语句来修复所有问题。 addlashes 函数将加密文件弄乱了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2013-09-07
    • 2011-04-23
    • 2012-07-05
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    相关资源
    最近更新 更多