【发布时间】: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