2010-11-03 42 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做類似的事情。

相關問題