使用 aes_256_cbc 密码加密时的默认 IV 是多少?

2024-04-22

我在一个文件中生成了一个随机 256 位对称密钥,用于使用 OpenSSL 命令行加密一些数据,稍后我需要使用 OpenSSL 库以编程方式解密该数据。我没有成功,我认为问题可能出在我正在使用(或没有使用)的初始化向量中。

我使用以下命令加密数据:

/usr/bin/openssl enc -aes-256-cbc -salt -in input_filename -out output_filename -pass file:keyfile

我使用以下调用来初始化数据的解密:

EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, keyfile.data(), nullptr))

keyfile is a vector<unsigned char>保存密钥的 32 字节。我的问题是关于最后一个参数。它应该是密码算法的初始化向量。我在加密时没有指定 IV,因此必须使用一些默认值。

为该参数传递 nullptr 是否意味着“使用默认值”?默认为空,并且第一个密码块中没有添加任何内容吗?

我应该提到的是,我可以从命令行解密,而无需提供 IV。


使用 EVP_aes_256_cbc() [原文如此] 密码加密时的默认 IV 是多少...

为该参数传递 nullptr 是否意味着“使用默认值”?默认为空,并且第一个密码块中没有添加任何内容吗?

空无一人。你必须提供它。为了完整性,IV 应该是不可预测的。

不可预测与两者略有不同Unique and Random。例如,SSLv3 过去使用最后一个密文块作为下一个块的 IV。它是Unique,但两者都不是Random nor 不可预测,并且它使 SSLv3 容易受到选定的明文攻击。

其他库做了一些聪明的事情,例如提供空向量(一串 0)。攻击者为此感谢他们。另请参阅为什么使用具有 CBC 模式的非随机 IV 会存在漏洞? https://stackoverflow.com/q/3008139/608639在堆栈溢出和如果使用已知和/或固定的 IV,CBC 模式下的 AES 安全吗? https://crypto.stackexchange.com/q/5094/10496在 Crypto.SE 上。


/usr/bin/openssl enc -aes-256-cbc...

我应该提到的是,我可以从命令行解密,而无需提供 IV。

OpenSSL 使用内部混搭/密钥派生函数,该函数获取密码并派生密钥和 iv。它的名字叫EVP_BytesToKey https://www.openssl.org/docs/man1.0.1/crypto/EVP_BytesToKey.html,您可以在手册页中阅读相关内容。手册页还说:

如果总密钥和 IV 长度小于摘要长度并且使用 MD5,则派生算法与 PKCS#5 v1.5 兼容,否则使用非标准扩展来派生额外数据。

有很多例子EVP_BytesToKey一旦你知道要寻找什么。Openssl 密码到密钥 https://stackoverflow.com/q/9488919/608639是 C 中的一个。如何使用 AES 解密使用 openssl 命令加密的 Java 文件 https://stackoverflow.com/q/11783062/608639在 Java 中的一个。


EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), nullptr, keyfile.data(), nullptr))

我在加密时没有指定 IV,因此必须使用一些默认值。

检查您的返回值。呼叫应该在路径中的某个地方失败。也许不在EVP_DecryptInit_ex,但肯定之前EVP_DecryptFinal.

如果没有失败,请提交错误报告。

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

使用 aes_256_cbc 密码加密时的默认 IV 是多少? 的相关文章

  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • WP8.1 C# 绑定联系人图像

    信息很简单 我正在尝试创建一个可以显示用户联系人的应用程序 我也是一名自学成才的程序员 所以我在某些方面有编程经验 但总体来说我对数据绑定相对较新 首先 我有一个 ListView 控件 其中包含图像绑定
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • 代码块 power 函数在 c 中不起作用

    我正在使用代码块来学习c 我的代码是 include
  • 宏可以按参数数量重载吗?

    如何this https stackoverflow com q 9183993 153285工作 如何实现 C99 C 11 可变参数宏以仅根据为其提供多少个参数来扩展到不同的事物 编辑 请参阅末尾以获得现成的解决方案 要获得重载的宏 首
  • 无缝滚动瓷砖地图

    我正在开发一个自上而下的角色扮演游戏 并且想要实现无缝滚动地图 也就是说 当玩家探索世界时 地图之间没有加载屏幕 也没有通往下一个区域的 门 我有两种方法可以打破世界 在顶层 我有 区域 它只是 9 个 地图 的集合 这些区域仅由目录表示
  • C for 循环索引:新 CPU 中的前向索引更快吗?

    在我订阅的邮件列表上 两位知识渊博的 IMO 程序员正在讨论一些优化的代码 并说了以下内容 在 5 8 年前发布的 CPU 上 向后迭代 for 循环稍微快一些 e g for int i x 1 i gt 0 i 因为比较i归零比将其与其
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 按值返回的函数的返回语句中的初始化

    我的问题源于深入研究std move in return语句 例如以下示例 struct A A std cout lt lt Constructed lt lt this lt lt std endl A A noexcept std c
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • EWS - 给予预约,获取预约的所有者副本

    在 EWS 中进行预约后 是否可以获得所有者的副本 例如 如果我登录为user1 我有user1创建的约会的副本user2 我有冒充权 我要编辑user2预约的副本 我怎样才能获得user2 s copy 您可以使用 PidLidClean
  • 参数数量在编译时确定的 Lambda 函数

    我想声明一个带有 N 个参数的 lambda 函数 其中 N 是模板参数 就像是 template
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 如何在没有 Visual Studio 的情况下将新文件添加到 .csproj 文件

    如何添加新文件到 csproj从命令提示符 我认为没有任何工具可以响应命令行上的 add project 命令来执行此操作 但我认为您可以幸运地创建一个程序 脚本来直接操作 csproj 文件的 XML 内容 csproj 文件的结构如下所
  • C# amo 获取角色完整

    我正在开发一个 SSAS 项目 其中除其他事项外 我需要获取 C 中表格多维数据集的完整用户列表 目前我让它以这样的方式工作 我可以获得角色 但数据不完整 当我调用 Server Database Roles 为了便于阅读而简化 属性并枚举

随机推荐