繁体   English   中英

如何为 openssl 解密命令提供字符串 IV 和密钥?

[英]How to provide string IV and Key to openssl decrypt command?

我正在使用以下 wiki 中的加密和解密函数: https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption

它使用密钥 =“01234567890123456789012345678901”和 iv =“0123456789012345”的 AES-256-cbc 算法。 我能够加密我的文本,将其写入文件encrypted.enc并从文件中返回解密。

我只是使用以下代码将加密的密文写入文件:

fd = fopen ("/var/local/encrypted.enc", "w");
fwrite ((const char *)ciphertext, sizeof(char), ciphertext_len, fd);
fclose(fd);

现在我想从 bash 提示符下解密这个文件(不使用上面的代码)。 我尝试了不同的标志,但无法弄清楚如何准确地做到这一点。

我试过这个:

openssl enc -aes-256-cbc -d -out decrypted.txt -in encrypted.enc -iv 0123456789012345 -k 01234567890123456789012345678901

但得到了关于十六进制宽度的错误。所以,将这些值转换为十六进制并尝试:

openssl enc -aes-256-cbc -d -out decrypted.txt -in encrypted.enc -iv 30313233343536373839303132333435 -k 3031323334353637383930313233343536373839303132333435363738393031

但现在我收到“坏幻数”错误......

如何使用 openssl 实用程序解密文件?

openssl enc命令在加密时默认使用随机生成的盐值。 它以该值开始 output ,前面是代表字符Salted__的“幻数”。 获取命令的enc版本,您可以看到此处所示的内容:

$ printf 1234567890123456 | openssl enc -aes-256-cbc -iv 0123456789012345 -k 01234567890123456789012345678901 | hexdump -C
00000000  53 61 6c 74 65 64 5f 5f  ed 6c b5 aa e2 92 4a 00  |Salted__.l....J.|
00000010  68 f7 b2 40 d2 44 44 8b  fa 4c 05 95 99 cf 76 32  |h..@.DD..L....v2|
00000020  4e 15 37 65 93 00 d6 b2  ff 4d 1b 6c af 46 64 f6  |N.7e.....M.l.Fd.|
00000030

解密时,预期会出现相同的幻数。 您的文件不包含它,因此出现错误。 这是 OpenSSL 专有的东西。

使用-nosalt选项可以(但不推荐)避免盐渍:

$ printf 1234567890123456 | openssl enc -aes-256-cbc  -iv 0123456789012345 -k 01234567890123456789012345678901 -nosalt | hexdump -C
00000000  54 05 6a fb c3 60 a9 32  3d 2e e0 4c 2a 21 4a a1  |T.j..`.2=..L*!J.|
00000010  3c a7 34 f3 8f c4 15 33  99 dd 08 f7 e5 ef ea 57  |<.4....3.......W|
00000020

在您的解密命令上使用相同的-nosalt选项,您应该不再得到那个bad magic number 可能仍会遇到其他问题,具体取决于您在加密数据时使用了哪种填充(如果有),但您没有提供足够的信息来得出任何结论。


就像评论中提到的那样, -k小写和-K大写之间是有区别的。 它与您的情况有关,您可能使用了错误的情况。 查看openssl enc手册页以获取更多信息,并阅读有关-nosalt选项的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM