什么是.NET中的“openssl enc -a -e -salt -des3 -pass pass:abc123”?

时间:2010-11-03 18:01:55

标签: .net openssl 3des pkcs#5

我的.Net应用程序需要与基于Linux的系统进行通信,该系统使用以下命令行来加密他们的消息:

openssl enc -a -e -salt -des3 -pass pass:abc123

如何在c#中加密/解密消息的等效代码看起来像?

我知道我应该TripleDES使用CBC modePKCS7 padding。我不知道应该使用block sizeinitialization vector (IV)

我也很困惑如何从密码中获取密钥。我应该使用PBKDF1还是PBKDF2以及我应该使用哪种盐?

所以看起来很标准的工作对我来说就是彻夜难关。有人能帮助我吗?

1 个答案:

答案 0 :(得分:6)

所以这就是诀窍:

> openssl enc -a -e -salt -des3 -P -pass pass:abc123
salt=17685C0658F85BA4
key=1CB6E5A0AA4953EC2323CBA021EF008C9193F5F29990DE87
iv =9148EB5B2BF2E9B2

如果我提供TripleDES算法,则输出与openssl输出几乎相同。只有差异是在openssl输出开始时额外的16个字节。这些字节的前八个是“Salted__”文本,第二个八个是盐。

盐是随机的。那么我应该如何从密码和盐中获取密钥和iv? PBKDF1PBKDF2不符合资格。

所以这是第二招:

A = MD5(pwd + SALT)
B = MD5(A + PWD + SALT)
KEY + IV = A + B

加号代表串联,Key长24个字节,IV长8个字节。

我从Deusty blog学到了这些技巧,他用AES做了类似的事情。