我从https://www.openssl.org/source/下载了openssl-1.0.2l.tar.gz
源代码包,并为Windows制作了全新的x64版本。我使用openssl
应用程序使用以下命令加密文件:
openssl enc -aes-128-cbc -a -salt -in data.txt -kfile key.txt -out encrypted.txt -p
现在,我想在.NET应用程序中使用加密文件(用C#编写)。我读取加密文件(使用Base64
进行编码,因为-a
开关),对其进行解码,并提取前16个字节以获取OpenSSL生成的盐...这到目前为止工作正常; salt的前缀为Salted__
,以下8个字节是实际的salt值。
到目前为止我学到的是OpenSSL读取给定密钥文件的第一行并使用该字符串作为密码。实际的密钥和初始化向量来自passphase,salt和一些哈希,这些都没有正式记录。
-p
开关给了我用于加密的密钥和初始化向量,但我想知道,我如何从已知的密码和盐中复制数据......我拥有的一切尝试给我关键和矢量数据,这与openssl应用程序给我的不同。
当然,我已经在stackoverflow和crypto.stackexchange上找到了类似的问题(和答案),但是没有一个解决方案似乎有用,或者与aes-256-cbc
有关... ...不确定,如果这样做的话差?
正确派生密钥和初始化向量需要做些什么?