2010-11-03 41 views
4

我的.NET应用程序需要与使用以下命令行来对其邮件进行加密基于Linux系统通信:在.NET中等价于“openssl enc -a -e -salt -des3 -pass pass:abc123”是什么?

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

如何将相当于码加密/解密在C#中的消息是什么样子?

据我所知,我应该使用TripleDESCBC modePKCS7 padding。我不知道应该使用什么block sizeinitialization vector (IV)

另外我很困惑我应该如何从密码派生密钥。我应该使用PBKDF1还是PBKDF2以及我应该使用什么盐?

因此,看起来相当标准的工作对于我来说终日难题。有谁能够帮助我?

回答

6

因此,这里的窍门:

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

如果我喂TripleDES算法的输出是OpenSSL的输出几乎相同。 openssl输出开始处的唯一区别是额外的16个字节。这些字节的前八个是“Salted__”文本,而后八个是salt。

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

因此,这里是第二招:

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

加号代表串联,主要是24个字节长,四是8个字节长。

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