【问题标题】:Decryption with AES and CryptoAPI? When you know the KEY/SALT使用 AES 和 CryptoAPI 解密?当你知道 KEY/SALT
【发布时间】:2009-10-06 13:38:45
【问题描述】:

好的,所以我有一个打包的专有二进制格式。这基本上是几个不同栅格数据集的松散包装。无论如何,过去只是阅读本文并打开包装是一件容易的事。但是现在在下一个版本中,光栅 xml 数据现在将使用 AES-256 加密(不是我的选择,我们也没有选择)。

现在我们基本上收到了 AES 密钥以及他们正在使用的 SALT,因此我们可以修改我们的解包器。

请注意,这些不是键,只是一个示例:

它们都是 63 字节长的 ASCII 字符:

Key: "QS;x||COdn'YQ@vs-`X\/xf}6T7Fe)[qnr^U*HkLv(yF~n~E23DwA5^#-YK|]v."
Salt: "|$-3C]IWo%g6,!K~FvL0Fy`1s&N<|1fg24Eg#{)lO=o;xXY6o%ux42AvB][j#/&"

我们基本上想使用 C++ CryptoAPI 来解密这个(我也是这周唯一的程序员,明天就会上线。不是我们的错)。我环顾四周寻找实现这一点的简单教程。不幸的是,我什至找不到他们分别拥有盐和密钥的教程。基本上,我现在真正拥有的只是一个接收 BYTE 数组的小函数。连同它的长度。我该怎么做?

我早上的大部分时间都在尝试对cryptoAPI进行正面/反面。但它并不顺利:(

编辑

所以我问他们如何加密它。他们使用 C#,并使用 RijndaelManaged,据我所知,这并不等同于 AES。

EDIT2

好吧,终于知道到底发生了什么,但他们给我们发错了钥匙。

他们正在做以下事情:

填充 = PKCS7 密码模式 = CBC 密钥被定义为一组 32 字节的十六进制。 IV 也被定义为一组 32 字节的十六进制。

当我问他们时,他们拿走了盐。

使用 wincrypt.h 头文件在 CryptoAPI 中设置这些东西有多难?

【问题讨论】:

  • 只要您的块大小为 128 位并且您坚持使用 128 位、192 位或 256 位密钥,您就可以合理地假设 RijndaelManaged == AES 细节blogs.msdn.com/shawnfa/archive/2006/10/09/…
  • 即使进行了编辑,您仍然需要了解它们如何将任意字节转换为可打印字符的编码方案。此外,您需要确认密码模式。是密码块链(CBC)吗?

标签: c++ rijndaelmanaged cryptoapi


【解决方案1】:

AES-256 使用 256 位密钥。理想情况下,系统中的每个键都应该具有相同的可能性。一个 63 字节的字符串将是 504 位。您首先需要弄清楚 63 个字符的字符串需要如何转换为 256 位(您提供的示例不是 base64 编码的)。接下来,“盐”不是 AES 的固有部分。您可能指的是 Cipher-Block-Chaining 模式下的初始化向量 (IV),或者您可能指的是以某种方式更新密钥。

如果我猜的话,我假设“SALT”是指 IV,特别是 CBC 模式。

在使用 CAPI 函数(例如decrypt)时,您需要了解所有这些。

如果所有这些听起来令人困惑,那么最好更改您的设计,这样您就不必担心如何正确处理所有这些问题。加密很难。一个错误的步骤可能会使所有安全性失效。考虑在我的Stick Figure Guide to AES 上查看this comment

更新:您可以look at this for a rough starting 指向 C++ CAPI。您需要一个 64 字符的十六进制字符串来获得 256 位(256 位/(4 位/字符)== 64 字符)。您可以自己将字符转换为位。

再次,我必须提醒,快速和松散地使用 IV 和琴键可能会产生灾难性的后果。我已经深入研究了 AES/Rijndael 到数学和门级,甚至编写了自己的实现。但是,在我的生产代码中,如果可能的话,我会坚持使用经过良好测试的 TLS 实现来处理传输中的数据。即使是静态数据,最好使用higher level library

【讨论】:

  • 感谢示例代码运行良好。它现在只是一个巨大的绷带。但它会让我们在明天度过难关,直到我们能够评估一个真正的选择。
【解决方案2】:

Rijndael 是 AES 的算法名称

【讨论】:

  • 但是 Rijndael 不是 AES! AES 将块大小限制为 128 位,而 Rijndael 允许块大小从 128 位到 256 位。
  • 我的立场是正确的。说 AES 是基于 Rijndael 公平吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2022-01-26
  • 2016-02-04
相关资源
最近更新 更多