gpt4 book ai didi

c - openssl 文件解密错误 bad decrypt。错误的 key 或不兼容的 Openssl 版本?

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:21 25 4
gpt4 key购买 nike

我一直在尝试解密我几年前加密的文件。我不记得密码了,所以我一直在浏览我当时可能使用过的潜在密码列表。这些密码之一产生的错误与我使用任何其他密码得到的错误不同。

有没有可能我找到了正确的密码,但其他地方出了问题?

这是我使用的命令:

openssl enc -aes-256-cbc -d -a -in <in.aes-256-cbc> -out <out> -k <password>

这个文件我有 11 个可能的密码。对于 10 个密码,命令返回错误:

EVP_DecryptFinal_ex:bad decrypt:/ ... /evp_enc.c:330:

但是对于一个密码,错误是不同的:

EVP_DecryptFinal_ex:bad decrypt:/ ... /evp_enc.c:337:

这两个错误有什么区别?

我在 OS X 上使用 OpenSSL 版本 098-59.60.1

最佳答案

这很可能是两种不同的错误情况,都与填充有关:

n=ctx->final[b-1];
if (n == 0 || n > (int)b)
{
EVPerr(EVP_F_EVP_DECRYPTFINAL_EX,EVP_R_BAD_DECRYPT);
return(0);
}
for (i=0; i<n; i++)
{
if (ctx->final[--b] != n)
{
EVPerr(EVP_F_EVP_DECRYPTFINAL_EX,EVP_R_BAD_DECRYPT);
return(0);
}
}

始终应用 OpenSSL 使用的 PKCS#7 填充。根据明文的大小,它将填充 1 到 16 个字节。 1 个字节取值为 0x01,两个字节取值为 0x02 等等,如果明文恰好为 N,则最多 16 个字节( block 大小)取值为 0x10 block 大小的倍数。

让我们看一下代码,其中 b 是 block 大小 (16),n 是最后一个字节的值。如果 n 为零(无效值,见上文)或者它大于 block 大小 b,您会看到它立即出错。只有在验证最后一个字节后,它才会检查 block 最后部分中的其他 n 字节是否与最后一个字节 n 具有相同的值。

很遗憾,您没有找到您的密码:只是在使用错误密码后填充中的错误稍后在代码中返回。

请注意,如果您尝试的时间足够长,您可能会创建一个解密的最后一个 block ,其中填充是正确的偶然。显然,这个机会略大于 1/256,因为这是生成最后一个字节值 0x01 的机会,这是可以生成的最小填充。在这种情况下,您可能需要查看解密的消息并检查内容是否正确。

关于c - openssl 文件解密错误 bad decrypt。错误的 key 或不兼容的 Openssl 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43924706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com