将 Crypto++ 对象保存到 std::vector

2023-12-04

我想将 Crypto++ 密钥保存到std::vector<uint8_t>。不幸的是只有CryptoPP::StringSink,这需要std::string参考但没有CryptoPP::VectorSink这需要参考std::vector.

以下代码工作正常

std::string spki;
CryptoPP::StringSink ss(spki);

CryptoPP::RSA::PublicKey publicKey(...);
publicKey.Save(ss);

但我想要这个

std::vector<uint8_t> spki;
CryptoPP::VectorSink vs(spki);

CryptoPP::RSA::PublicKey publicKey(...);
publicKey.Save(vs);

问题

VectorSink不能仅使用 typedef 创建,因为traits_type::char_type inside StringSinkTemplate:

using CryptoPP::StringSinkTemplate;
typedef StringSinkTemplate< std::vector<byte> > VectorSink;

In file included from cryptopp-test.cpp:65:
In file included from /usr/local/include/cryptopp/files.h:5:
/usr/local/include/cryptopp/filters.h:590:22: error: no member named
      'traits_type' in 'std::vector<unsigned char, std::allocator<unsigned char>
      >'
        typedef typename T::traits_type::char_type char_type;
                         ~~~^
cryptopp-test.cpp:243:20: note: in instantiation of template class
      'CryptoPP::StringSinkTemplate<std::vector<unsigned char,
      std::allocator<unsigned char> > >' requested here
        VectorSink vs(spki);

我怎样才能创建一个VectorSink?


VectorSink 的工作实现

// Written and placed in the public domain by rrmmnn
// Copyright assigned to the Crypto++ project.

namespace CryptoPP {

class VectorSink : public Bufferless<Sink> {
public:

  VectorSink(std::vector<uint8_t>& out)
    : _out(&out) {
  }

  size_t Put2(const byte *inString, size_t length, int /*messageEnd*/, bool /*blocking*/) {
    _out->insert(_out->end(), inString, inString + length);
    return 0;
  }

private:  
  std::vector<uint8_t>* _out;
};

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

将 Crypto++ 对象保存到 std::vector 的相关文章

随机推荐

  • 访问 android.git.kernel.org 被拒绝 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 任何人都知道为什么我可以毫无困难地访问项目http g
  • 如何让Android webview记住用户名和密码?

    这里是 Android Studio 中的代码 我还在 Android Studio 代码下方添加了 html 代码 使用 javascript 来记住 cookie 中的用户名和密码 它仅适用于某些 Android 设备 我不知道为什么
  • 添加到向量或从向量中删除后,指向向量元素的指针是否保留(在 C++ 中)

    我正在研究碰撞引擎 更具体地说 我正在尝试制作世界上相关物体的向量 为了能够访问世界上代表特定对象的主体向量中的特定主体 我需要知道哪个特定主体代表该对象 为此 当您添加新主体时 我想在主体向量中返回一个指向主体的指针 但是当我删除主体时会
  • 如何检测文件是否被包含或直接运行

    我有一个 php 文件 包含在我的 php 脚本中 但我不希望人们能够直接运行该文件 不包含在内 我怎样才能防止这种情况发生 制作包含的脚本根本无法通过 HTTP 访问 例如 通过保护子文件夹或将它们移动到文档根目录之上 如果你做不到这一点
  • PrimeFaces Extensions CKEditor:无法访问自定义配置

    我需要我的pe ckEditor加载自定义配置 但我在这件事上已经有一段时间不成功了 我将欢迎任何如何使其工作的建议 我需要它的功能 因为我有这个问题 PrimeFaces Extensions CKEditor 尝试将编码设置为 UTF
  • Silverlight 5 AccessViolationException

    我安装了 Silverlight 5 VS 2010 工具和 64 位开发人员运行时 现在当我执行特定操作时 我收到 System AccessViolationException 这些项目仍然是Silverlight 4 我还没有升级它们
  • Entrypoint的exec形式通过shell执行

    我正在构建一个基于 Windows 的 docker 镜像 FROM mcr microsoft com dotnet framework aspnet 4 8 windowsservercore ltsc2019 omitted for
  • 在标签中绑定值

    是否可以将 JavaFX 滑块中的双值绑定到标签 我想要得到这样的东西 m maxSlider new Label Right Slider Val m slider getValue1 m maxSlider textProperty b
  • Google Cloud Messaging 上的最大主题数

    我想避免在应用程序级别管理设备令牌的复杂性 一名用户在 iOS 和 Android 上使用多台设备 多个用户订阅一个应用程序组 将 1 和 2 作为 GCM 的主题显然是一个简单的解决方案 这样我只需在发送通知时处理我的应用程序 UserI
  • 文件无效:错误:转储失败,因为找不到 AndroidManifest.xml

    当我尝试在 Android 市场上传我的 Android 应用程序时 我遇到了这个问题 我去过stackoverflow 的这个问答我相信导出时我的 AndroidManifest xml 位于 apk 文件中 并且该 xml 文件的所有内
  • AJAX上传显示多个文件上传中仅文件的进度

    请帮我更改下面的代码 我有多个从 HTML 上传的文件 ajax 将所有上传的文件发布到一个 php 脚本 该脚本向进度函数发送反馈 问题是所有三个进度条只监听一个文件上传
  • 如何在 JSF 中收集 List 的提交值?

    我有一颗豆子List
  • 是否可以实现 __super 宏?

    请告诉我是否有办法手动实现微软特定的 super宏观 class Base public void func something class Derived public Base public void func Base func ju
  • 带有 Java 线性和对数滤波器的 MFCC

    我正在用Java实现MFCC算法 Java 中有三角滤波器和 MFCC 的示例代码 链接在这里 MFCC Java但是我应该遵循用 Matlab 编写的代码 MFCC MATLAB 我的问题是在 Matlab 代码中 它讨论了线性和对数滤波
  • Java 8 流是原子的吗?

    我读了一些帖子 但我仍然很困惑 我知道并行流将以利用 CPU 的并行方式执行 我相信子作业将作为原子单元执行 对吗 但是常规的 Java 8 流呢 如果我执行下一行代码 users stream map user gt user getUs
  • 在表单提交的网址中间添加问号

    当我单击表单中的提交按钮时 它会添加一个 就在 之前 因此 app pageName 更改为 app pageName 这是正常行为吗 代码只是基本的东西 angular module myApp controller MyCtrl fun
  • 如何在进入 Java 应用程序时更改光标

    我遇到了一些我无法解决的问题 我正在编写一个带有接受拖放操作的 JList 的 Swing Java 应用程序 我想在将文件或文件夹从系统拖到 Java 应用程序上时更改光标 我自己找到了 不过还是感谢克林顿的回答 这是我用过的 首先创建
  • Socket tcp C# 如何清除输入缓冲区?

    我正在为 Windows Phone 编写一个应用程序 我需要与服务器通信并传输数据 SERVER是用C 编写的 我无法修改它 客户是我必须写的 服务器被设计为客户端连接到它并传输数据 连接对于所有传输都保持打开状态 通过用 C 编写代码
  • Infinispan相当于ehcache的copyOnRead和copyOnWrite

    我计划在现有的网络应用程序中实施缓存解决方案 没什么复杂的 基本上是一个支持溢出到磁盘和自动驱逐的并发映射 将来可能需要对缓存进行集群 但不是现在 我喜欢 ehcache 的 copyOnRead 和 copyOnWrite 功能 因为这意
  • 将 Crypto++ 对象保存到 std::vector

    我想将 Crypto 密钥保存到std vector