Crypto++ 输出数据长度

2024-02-19

我正在尝试使用 Crypto++ 库中的 AES 加密:

CBC_Mode<AES>::Encryption e;

我有一个需要加密的二进制数据块。该类似乎提供了一个名为的方法ProcessData以此目的:

virtual void ProcessData(byte *outString, const byte *inString, size_t length);

看起来最后一个参数是输入数据的大小。不清楚的是为什么该方法不返回加密数据的大小。是否假设输出数据块的大小与输入数据块的长度完全相同?即使输入数据的大小只有一个字节,这是否有效?问候。


virtual void ProcessData(byte *outString, const byte *inString, size_t length);

看起来最后一个参数是输入数据的大小。不清楚的是为什么该方法不返回加密数据的大小......

ProcessData是所有分组密码的主力(但不是流密码或其他类型的对象)。另请参阅 Crypto++ 手册和cryptlib.h 文件参考 http://www.cryptopp.com/docs/ref/cryptlib_8h.html. cryptlib.h被描述为“为该库提供统一接口的抽象基类”.

ProcessData对块大小的数据长度进行操作。所以INSIZE等于OUTSIZE等于BLOCKSIZE。请注意,没有INSIZE or OUTSIZE- 我用它们来讨论。每个分组密码将提供一个常数BLOCKSIZE。将会有一个AES::BLOCKSIZE, DES_EDE::BLOCKSIZE, etc.

通常你do not use ProcessData直接地。您可以直接使用它,但您将对所有相关细节负责(更多细节如下)。

通常您使用StreamTransformationFilter,但原因并不明显。StreamTransformationFilter根据需要提供输入缓冲、输出缓冲和填充。其简要讨论于初始化-更新-最终 http://www.cryptopp.com/wiki/Init-Update-Final在维基上。

这是它在实践中的样子CBC mode http://www.cryptopp.com/wiki/CBC_modeCrypto++ wiki 上的示例:

try
{
    cout << "plain text: " << plain << endl;

    CBC_Mode< AES >::Encryption e;
    e.SetKeyWithIV( key, key.size(), iv );

    // The StreamTransformationFilter adds padding
    //  as required. ECB and CBC Mode must be padded
    //  to the block size of the cipher.
    StringSource ss( plain, true, 
        new StreamTransformationFilter( e,
            new StringSink( cipher )
        ) // StreamTransformationFilter      
    ); // StringSource
}
catch( const CryptoPP::Exception& e )
{
    cerr << e.what() << endl;
    exit(1);
}

在上文中,CBC_mode and StreamTransformationFilter共同努力,给您想要的结果。CBC_mode calls ProcessData并处理密码链细节。StreamTransformationFilter以首选大小提供纯文本。如果没有足够的纯文本,那么StreamTransformationFilter在输入上缓冲它。如果没有输出缓冲区,那么StreamTransformationFilter也缓冲密文。

StreamTransformationFilter还将根据需要应用填充。有默认填充,但您可以覆盖它。StreamTransformationFilter知道要应用什么填充,因为它询问模式(CBC_mode)是否需要填充以及填充应该是什么。


...是否假设输出数据块的大小与输入数据块的长度完全相同?即使输入数据的大小只有一个字节,这是否有效?

这就是StreamTransformationFilter符合方程。

一定要检查一下初始化-更新-最终 http://www.cryptopp.com/wiki/Init-Update-Final在维基上。如果您习惯于 Java 或 OpenSSL 编程,它应该会为您提供帮助。它应该可以帮助您“点击”。

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

Crypto++ 输出数据长度 的相关文章

随机推荐

  • 为什么我的 Django 视图在每个页面视图中都会被点击两次?

    我似乎一辈子都找不到问题所在 非常简单 我有一个从数据库中提取的数据库对象 将其 视图 增加一 然后保存 我的视图显示增加的值 但随后我的日志显示该值再次增加 g Game objects filter slug slug distinct
  • 将dataUrl转换为blob并通过ajax提交

    我正在使用 imgly 图像裁剪器插件 针对我的应用程序稍作修改 它当前将图像转换为dataUrl并将图像输出为 base64 图像 我可以将其另存为 jpeg 我正在努力调整dataURItoBlob找到函数here https stac
  • 无法打开文档“Main.Storyboard”。无法识别的文件内容

    从 Xcode 7 更新到 Xcode 8 后 我无法打开 Storyboard 有人可以帮忙吗 里面没有显示任何错误 对于我来说 将故事板打开为 源代码 修复合并冲突 然后重新启动 Xcode 就完成了这项工作
  • 使用 PHP 将二进制数据插入 SQL Server

    我在 SQL Server 2005 数据库中有一个 varbinary MAX 字段 我试图弄清楚如何使用 PHP 将二进制数据 即图像 插入到该字段中 我使用 ODBC 连接 SQL Server 数据库 我已经看到许多示例解释了如何与
  • Qt平台插件问题Rstudio

    我正在尝试通过 RStudio 绘制 seaborn 热图 I usereticulateR 中的包 下面是我的代码 library reticulate use condaenv python36 conda auto required
  • 如何用CLOB调用REPLACE(不超过32K)

    Oracle 11g 确实提高了 CLOB 的可用性 重载了大多数字符串函数 因此它们现在可以与 CLOB 一起本地工作 然而 一位同事从他的代码中得到了这个错误 ORA 22828 input pattern or replacement
  • 如何对 django url 进行单元测试?

    除了我的应用程序之外 我的应用程序在所有地方都实现了 100 的测试覆盖率urls py 你对我如何写作有什么建议吗有意义的对我的 URL 进行单元测试 FWIW 这个问题是在我尝试测试驱动开发时出现的 并且希望在编写代码来修复它们之前失败
  • 如何通过已知路由器上的三角测量来确定我的位置?

    有没有可用的开源软件 基本上 我只想根据位置固定且已知的路由器的信号强度进行三角测量 我意识到可能存在干扰的情况 但我们还是坚持列出已知的源代码 谢谢 我不知道任何三边测量软件 有人应该编写一个开源库 看看三边测量 http en wiki
  • 错误 NETSDK1064:找不到软件包 DnsClient,1.2.0

    我有一个 Asp Net core docker 镜像 我上次尝试构建它是两个月前 现在 我在尝试构建它时遇到错误 有任何想法吗 是不是有什么东西破坏了 Microsoft docker 镜像 当尝试在 Elasticbeanstalk 实
  • Python“数组索引太多”

    我正在使用 pandas 读取 python 中的文件 然后将其保存在 numpy 数组中 该文件的尺寸为 11303402 行 x 10 列 我需要拆分数据以进行交叉验证 为此我将数据切片为 11303402 行 x 9 列的示例和 1
  • 在 Cython 类中,使用 __init__ 和 __cinit__ 有什么区别?

    代码块1使用 init cython 3 cdef class c cdef int a str s def init self self a 1 self s abc def get vals self return self a sel
  • 服务器使用 HTTP Keep-Alive 与客户端通信

    最近在一次采访中 我被问到如何处理在线聊天客户端应用程序 我经历了标准的 轮询 解决方案 但被打断了 因为面试官正在寻找 HTTP 1 1 keep alive 方法 使用 HTTP 相当长一段时间并记住重点是 无状态 这对我来说从来没有发
  • 无法对测试运行“xxxx 2011-10-20 13:00:00”进行排队。您没有执行该操作的适当权限

    我正在尝试在 C VS2010 中运行我的测试用例 但突然有一天 它开始向我展示无法对测试运行 xxxx 2011 10 20 13 00 00 进行排队 您没有执行该操作的适当权限 错误 虽然我通过我的测试进行了调试 但无法选择并运行它
  • 如果连接丢失,从 SQL Server 到 Oracle 服务器的 OpenQuery 将无限期挂起

    我有一个在 SQL Server 2005 数据库上运行的计划作业 它运行一个从视图导入数据的存储过程 该视图由一个OPENQUERY到链接的 Oracle 服务器 我无法控制 Oracle 服务器 它在地理上和虚拟上都与 Sql Serv
  • 如何重命名本地 Git 分支?

    如何重命名尚未推送到远程存储库的本地分支 Related 重命名本地和远程 Git 存储库的 master 分支 https stackoverflow com questions 1526794 rename master branch
  • 如何在 Swift 中为 iOS 制作垂直文本 UILabel 和 UITextView?

    如果您根据标题提出这个问题 但对蒙古语不感兴趣 您可能会寻找以下问答 Swift 如何旋转 UIButton 和 UILabel 的文本 https stackoverflow com questions 28717634 swift ho
  • JSoup.clean() 不保留相对 URL

    我努力了 Whitelist relaxed Whitelist relaxed preserveRelativeLinks true Whitelist relaxed addProtocols a href http https mai
  • jQuery 检测 cookie 已启用

    我有一个基于 jQuery 的网络应用程序 我的要求相当简单 我想使用 jQuery 来查明用户是否在其 Web 浏览器中启用或禁用了 cookie 我知道有一个可用的插件可用于创建 检索 删除 更新 cookie 但是 有没有办法 jQu
  • 字符串类型不可变的非技术好处

    我想知道从程序员的角度来看 字符串类型不可变的好处 技术优势 在编译器 语言方面 可以概括为 如果类型是不可变的 则更容易进行优化 读here https stackoverflow com questions 2916358 immuta
  • Crypto++ 输出数据长度

    我正在尝试使用 Crypto 库中的 AES 加密 CBC Mode