使用加密的 std::string 进行 sqlite 查询(无法识别的令牌)

2023-12-21

我有一个 C++std::string它使用 AES 128 加密并希望将其写入 sqlite 数据库。我已经想通了,我必须逃离'字符与'' and " with "",但似乎还有另一个问题。

It says:

unrecognized token: "'""\235\211g\264\376\247\3348( ]tu\202\346\360\226h\205D\322-\373\347y"

我的查询如下所示:

UPDATE tablename
SET column='""\235\211g\264\376\247\3348( ]tu\202\346\360\226h\205D\322-\373\347y\315\|`\3206\245\220j6
\215&\301ww/\222R\352]\253,\362&\233ï\2530\322搜\377\321!\334t\224\271ќVu\214Z\\256""\242O\254\241\254\365\360<P\364\356\370\225jnۢ\231\335($\243\377fH\225\215\224\223\254\316' 
WHERE index='1';

使用未加密字符串的相同查询有效。有任何想法吗?


你做错了。

你不应该,ever,在查询中完整写出参数;但你应该使用绑定参数: 将值绑定到准备好的语句 http://www.sqlite.org/c3ref/bind_blob.html.

主要优点?绑定参数不必进行转义,这完全防止了任何 SQL 注入的风险,也大大简化了您的生活!

此外,准备好的语句可以重复使用以提高效率,所以让我举一个完整的例子。

//
// WARNING: for concision purposes there is no error handling
//          and no attempt at making this code even remotely exception-safe.
//
// !!! DO NOT USE IN REAL LIFE !!!
//
void update(std::map<int, std::string> const& blobs) {
    // 1. Prepare statement
    sqlite3_stmt *stmt;

    sqlite3_prepare(db, 
                    "update tablename set column = ? where index = ?",
                    -1, // statement is a C-string
                    &stmt,
                    0  // Pointer to unused portion of stmt
    );

    // 2. Use statement as many times as necessary
    for (auto const& pair: blobs) {
        int const index = pair.first;
        std::string const& blob = pair.second;

        // 2.1 Bind 1st parameter
        sqlite3_bind_text(stmt,
                          1,  // 1-based index: 1st parameter
                          blob.data(),
                          blob.size(),
                          0   // no need for sqlite to free this argument
        );

        // 2.2 Bind 2nd parameter
        sqlite3_bind_int(stmt,
                         2, // 1-based index: 2nd parameter
                         index
        );

        // 2.3 Execute statement
        sqlite3_step(stmt);

        // 2.4 Reset bindings
        sqlite3_reset(stmt);
    }

    // 3. Free prepared query
    sqlite3_finalize(stmt);
} // update

注意:您当然可以将准备好的声明保留更长时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用加密的 std::string 进行 sqlite 查询(无法识别的令牌) 的相关文章

随机推荐

  • 如何使用NAudio的BiQuadFilter?

    我使用 NAudio 录制麦克风的声音并将其保存在文件中 我用这个 public WaveFileWriter m WaveFile null m WaveFile new WaveFileWriter strFile m WaveSour
  • Windows cmd 模拟控制台输入命令

    我需要编写一个批处理脚本 当用户名和密码保存在某处 例如 在文件中 时 该脚本会自动连接到 VPN VPN 客户端是 openconnect 它提供了 CLI 但问题是需要以交互方式向命令提供用户输入才能完成 当我运行时请参阅下面的输出 o
  • 为 Spring MVC/AOP 应用程序实现动态菜单

    我希望为我的 Spring MVC 应用程序实现动态可更改的菜单 每当添加注释方法或控制器时更新 我想要的是引入新的注释 RequestMenuMapping 这将去 Controllerbeans 及其方法 就像 RequestMappi
  • 如何将 TLS 1.0 与 Python 3.8 结合使用?

    我有一个使用 Jira 连接的代码jira module 不幸的是 Jira 服务器仅支持SSLv3 and TLS1 我知道它们是旧协议 今年年底前主办方将接受新的 但在那之前我需要我的 python 代码来使用 Jira 连接TLS1
  • 将文件上传到 FTP 一旦到达目的地就会损坏

    我正在创建一个简单的拖动文件并自动上传到 ftp Windows 应用程序 我正在使用MSDN代码 http msdn microsoft com en us library ms229715 aspx将文件上传到 FTP 代码非常简单 G
  • Rails 5、Gmaps4Rails - 设置

    多年来我一直在尝试找出如何将 gmaps4rails 合并到 Rails 应用程序中 我制作了一个全新的应用程序并尝试了新的 我不知道出了什么问题 我正在寻找完整且最新的设置说明 许多 SO 帖子都提到了旧版本的依赖项 最终表明该问题已在更
  • 在 python 脚本中更改为 sudo 用户

    我有个问题 我正在编写一个软件 需要它来执行需要用户处于 sudo 模式的操作 运行 sudo python filename py 不是一个选项 这引出了我的问题 有没有办法通过 python 脚本更改为 sudo 安全性不是问题 因为用
  • C# String.Format 参数

    我有一个像这样的数组 object args 并且需要将这些参数插入字符串中 例如 str String Format Her name is 0 and she s 1 years old args 代替 str String Forma
  • Vite 服务器正在运行,但无法在本地主机上运行

    Vite Reactjs 服务器正在运行 但我得到了 找不到该本地主机页面 未找到该网址的网页 https localhost 4200 在浏览器上 从 create React app react scripts 迁移到 Vite 时的一
  • 如何知道数据何时加载到自定义 RecyclerView 中?

    我正在我的应用程序中创建并使用自定义 RecyclerView 我需要打电话getChildAt 0 getWidth 在任何工作之前保存类字段中的第一个项目宽度 为此 我需要在适配器中加载数据时捕获 否则 getChildAt 0 将返回
  • JPA:可嵌入类中的外键

    我有以下情况需要解决 但无法使其工作 尝试过 Hibernate 和 EclipseLink Table 1 Column A is Primary Key some other columns do follow Table 2 Colu
  • 刷新浏览器地址栏时如何重置CSS(a:visited {color:green})

    我已经成功测试了 XHTML 文档标签上的访问链接效果 但是当我刷新时 那些以绿色突出显示的访问过的链接无法删除 浏览器上的地址栏 除非我单击清除每个浏览器上的所有浏览器缓存和历史记录 那么问题是如何在单击浏览器刷新按钮时重置所有CSS而不
  • 取消数组输入框

    我试图使取消函数适用于我的数组 它适用于简单的输入框 但 Array InputBox 不太喜欢它 工作代码 If strVarValue vbNullString Then MsgBox User canceled WScript Qui
  • Git Merge -冲突样式 diff3 和合并之间的区别

    Context git merge考虑设置merge conflictStyle如果发生合并冲突 可能的值为merge 默认 和diff3 我注意到diff3有时会产生更大的冲突 参见下面的示例 我发现这张纸 https www cis u
  • 好奇心:为什么 Expression<...> 编译后的运行速度比最小的 DynamicMethod 更快?

    我目前正在做一些最后的优化 主要是为了乐趣和学习 并发现了一些给我留下了几个问题的东西 首先 问题 当我通过使用在内存中构造一个方法时动态方法 http msdn microsoft com en us library system ref
  • 查找至少一条 s-t 路径上出现的所有边

    我正在寻找一种算法来解决以下问题 输入 有向图 G 节点 s 和 t 输出 属于简单 st 路径一部分的所有边的集合 如果没有节点被访问两次 则路径是简单的 有人知道如何做到这一点吗 这个问题在 DAG 上很容易 因为所有路径都很简单 但是
  • XML 规范和 UTF-16

    第 4 3 3 节 http www w3 org TR REC xml charencoding and 附录F http www w3 org TR REC xml sec guessing of the XML 1 0 规范 http
  • 如何为空手道中的数据驱动测试准备嵌套数据结构?

    我目前使用 junit5 wiremock 和 resassured 进行集成测试 空手道看起来非常有前途 但我在数据驱动测试的设置方面遇到了一些困难 因为我需要准备一个嵌套数据结构 在当前设置中 该数据结构如下所示 abstract cl
  • 如何使用第 3 方 dll 对 .EXE 进行单元测试?

    我仍在学习 TDD 的黑暗艺术 最近我一直在尝试学习如何在 VB6 中进行 TDD https stackoverflow com questions 467789 are there any good tdd tools or resou
  • 使用加密的 std::string 进行 sqlite 查询(无法识别的令牌)

    我有一个 C std string它使用 AES 128 加密并希望将其写入 sqlite 数据库 我已经想通了 我必须逃离 字符与 and with 但似乎还有另一个问题 It says unrecognized token 235 21