如何清理(用随机字节覆盖)std::string 内部缓冲区?

2024-03-28

考虑一个场景,其中std::string用于存储a secret。一旦它被消耗并且不再需要,最好清理它,即覆盖包含它的内存,从而隐藏它secret.

std::string提供一个函数const char* data()返回指向 (C++11 起)连续内存的指针。

现在,由于记忆是连续的and由于范围结束,变量将在清理后立即被销毁,是否安全:

char* modifiable = const_cast<char*>(secretString.data());
OpenSSL_cleanse(modifiable, secretString.size());

根据此处引用的标准:

$5.2.11/7 - Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data member resulting from a const_cast that casts away a const-qualifier68 may produce undefined behavior (7.1.5.1).

否则的话,但是上述条件(连续的、即将被移除的)是否使其安全?


该标准明确规定您不得写入const char*由返回data(),所以不要这样做。

有一些完全安全的方法来获取可修改的指针:

if (secretString.size())
  OpenSSL_cleanse(&secretString.front(), secretString.size());

或者,如果字符串可能已经收缩,并且您想确保擦除其整个容量:

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

如何清理(用随机字节覆盖)std::string 内部缓冲区? 的相关文章

随机推荐

  • 复选框不显示 Chrome - 在其他浏览器中工作

    我不确定发生了什么事 记住我 左侧应该有一个复选框 底部应该有两个测试复选框 因为我有一辆自行车 我有一辆汽车 它们在 Firefox 中显示 但在 Chrome 中不显示 我相信我有 CSS 问题 但找不到它 有人可以帮忙吗 http w
  • Python ord 函数中的多个字符

    编程初学者在这里 Python 2 7 是否有解决方法可以在 Python 的 ord 函数中使用多个字符 例如 我有一个十六进制字符串 xff x1a 我想要它的十进制值 以便我可以将其与其他十六进制字符串求和 但是 ord 只接受单个十
  • 在C中从键盘获取输入而不用“return”

    在 C Mac OS 中 如何在不按 return 的情况下从键盘获取输入 在带有终端的类 Unix 系统上 我认为 MacOS X 符合要求 那么您需要将终端设置为所谓的 cbreak 模式 重点是terminal保留数据直到按下 ret
  • 尽管导入了类,但未定义类

    我似乎遇到了一个非常令人困惑的错误 尽管导入了包含我的类的 py 文件 Python 仍然坚持认为该类实际上并不存在 testmodule py中的类定义 class Greeter def init self arg1 None self
  • 在我的 android studio 模拟器中元素相互重叠

    我是新来的Android Studio 当我创建应用程序时 所有元素都相互重叠 我不知道如何编辑这段代码 请给我详细的描述 布局编辑器和模拟器结果 布局代码
  • Spark 执行器上的对象缓存

    对于 Spark 专家来说 这是一个很好的问题 我正在处理数据map操作 RDD 在映射器函数中 我需要查找类的对象A用于处理 RDD 中的元素 由于这将在执行器上执行并创建类型的元素A 将被查找 恰好是一个昂贵的操作 我想在每个执行器上预
  • PHP:如何检查 URL 是 Youtube 还是 vimeo

    如何编写一个函数来检查提供的 URL 是 youtube 还是 vimeo 例如 我将这两个 URL 作为字符串存储在数据库中 http vimeo com 24456787 http www youtube com watch v rj1
  • 使用 groupby 和 Mean() 在 Pandas 中保留一个包含分类变量的列

    有没有办法在之后保留分类变量groupby and mean 例如 给定数据框df ratio Metadata A Metadata B treatment 0 54265 937500 B10 1 AB cmpd 01 11 10736
  • 如何在内容可编辑 iframe 内创建非内容可编辑 div?

    我需要将内容可编辑的 iframe 内的某些部分设置为不可编辑 我怎么做 下面的代码在 Chrome 中有效 但在 Firefox 中无效 一切都可以在 Firefox 中编辑 我需要复选框不可编辑 Editable text div di
  • Azure 中虚拟机和应用服务之间的 Vnet

    我不知道如何连接网络应用程序 应用服务 to a 虚拟机在蔚蓝中 我已从 Web 应用程序配置面板创建了 VNet 所有项目都是使用创建的资源管理型号 都在同一个订阅并且至少是Standard定价层 显然 Web 应用程序无法连接到 V2
  • 警告会话 0x0 服务器为空、意外错误、关闭套接字连接并尝试重新连接

    我有两个节点 每个节点上都安装了带有Mesos marathon和zookeeper的docker 这是我在主节点上的 docker compose 文件 version 3 7 services zookeeper image ubunt
  • SQL Server 锁解释

    下面是 SQL Server 2000 支持的锁列表 我对 意图 锁的实际含义有点困惑 我在网上查了一下 答案似乎有点神秘 为了进一步获得我的具体问题的答案 我希望将此问题用作 Wiki 了解每个锁的含义以及在什么情况下将获取该类型的锁 S
  • pandas.groupby 对象上尊重时间的移动平均值

    给定一个以下格式的 pandas 数据框 toy pd DataFrame id 1 2 3 1 2 3 1 2 3 date 2015 05 13 2015 05 13 2015 05 13 2016 02 12 2016 02 12 2
  • 在 JavaFX 上的按钮中加载 SVG 文件

    我在 Inkscape 中创建了一个 SVG 图像 我把它放在与我的班级相同的目录中 有没有办法加载该图像并将其转换为 SVG 路径 这背后的想法是获得该图像getClass getResource image svg toExternal
  • 如何在 Jetpack Compose 中创建垂直无限轮播?

    我正在尝试构建一个可滚动列 最好是 LazyColumn 它将在滚动到末尾后再次开始重新显示第一个项目 例如 看看这个闹钟 它将从 00 59 开始循环 然后再次从 0 开始平滑滚动 我尝试过一个普通的 LazyColumn 它会显示 58
  • 线程安全的向量和字符串容器?

    我之前发过一个问题 在嵌入式 Linux 平台上使用 std string 时出现段错误 https stackoverflow com questions 2412667 seg fault when using stdstring on
  • 获取所有Android版本中来电的电话号码

    我正在尝试获取来电的来电号码 我搜索并找到了这个在 Android 中检索来电的电话号码 https stackoverflow com questions 1853220 retrieve incoming calls phone num
  • 如何包装 OAuth2 异常?

    我们有一个 REST API 使用Spring OAuth2 用户通过身份验证后 所有 JSON 响应均采用以下格式 code 12345 data 但是身份验证失败的 JSON 响应与上述格式不相符 因为这是由 Spring 处理的 例如
  • get_class() 期望参数 1 为对象,给定为 null

    当我尝试在新的本地计算机上部署 Symfony 2 8 项目时 我在代码的多个位置遇到此错误 Warning get class expects parameter 1 to be object null given 在stackoverf
  • 如何清理(用随机字节覆盖)std::string 内部缓冲区?

    考虑一个场景 其中std string用于存储a secret 一旦它被消耗并且不再需要 最好清理它 即覆盖包含它的内存 从而隐藏它secret std string提供一个函数const char data 返回指向 C 11 起 连续内