【发布时间】:2019-06-06 20:56:46
【问题描述】:
经过多次反复试验,我能够使用 Windows CryptoAPI 使用 AES-256 密钥成功加密文件。
加密程序执行以下操作:
- 将块长度固定为 128 位 (
AES) - 生成 AES-256-CBC 密钥 (
CryptGenKey) - 使用此密钥加密文件 (
CryptEncrypt)
现在为了解密文件,我想使用原始十六进制值格式的密钥。例如,我有这个键:
76FD3DBDFA2AA07113A227D9E0311DC5BC7FA78A7E4FC3CE63919B9C49DC4F06
(请注意,此密钥是随机的generated online 仅作为示例,不会在任何地方用于保护任何东西)
我所拥有的只是密钥的原始十六进制值,如上所示。所以我需要能够将它提供给CryptDecrypt 函数并解密数据。 问题是:
CryptDecrypt expects the key to be sent in as an HCRYPTKEY data type。但我所拥有的只是一个以这种格式存储的密钥:
wchar_t* key = argv[1] //reading the key in hex format as an argument
我尝试过的:
CryptDeriveKey 从基值派生 HCRYPTKEY 格式的密钥。但是,CryptDeriveKey 不会接受我目前拥有的十六进制值格式的密钥,因为它反过来需要 HCRYPTHASH 格式的密钥。
此时,我不确定如何使用我拥有的原始十六进制值作为 CryptDecrypt 解密数据的密钥。我知道有可能,只是不知道怎么去。
由于我不会深入探讨的原因,我必须从我拥有的原始十六进制值中派生密钥(与任何其他密钥格式,如字节数组相反)并将其提供给CryptDecrypt 解密数据。
【问题讨论】:
标签: encryption cryptography cryptoapi