2011-05-22 44 views
2

System.Security.Cryptography.TripleDES允許我使用零填充像這樣:在OpenSSL中使用零填充?

static TripleDES CreateTripleDES(byte[] key, byte[] iv) 
{ 
    TripleDES des = new TripleDESCryptoServiceProvider(); 
    des.Key = key; 
    des.IV = iv; 
    des.Mode = CipherMode.CBC; 
    des.Padding = PaddingMode.Zeros; 
    return des; 
} 

現在改爲使用OpenSSL

CipherContext cc = new CipherContext(Cipher.DES_EDE3_CBC); 
byte[] des3 = cc.Encrypt(msg2, tripleKey, tripleIv, 0); 
//public byte[] Encrypt(byte[] input, byte[] key, byte[] iv, int padding); 

的問題是,當我用兩種方法加密的字符串,我得到兩個相同的結果:

first method (OK): 90dd67c475dc3a8ce3d0c8927ce43758715888c16688c9828ac92aa86019126297b7ccb80a4729224acd07285b85a847e48fb01b3da4639c 
second method (NOT OK): 90dd67c475dc3a8ce3d0c8927ce43758715888c16688c9828ac92aa86019126297b7ccb80a4729224acd07285b85a847b77485eb0a1f214e 

我想這是因爲填充爲零。但我不知道如何在openssl中使用填充零。

任何幫助表示讚賞。

回答

2

Openssl的不允許「零填充」,可能是因爲結果並不一致(如果明文的最後一個字節是什麼0 ...)

Openssl的將讓您使用PKCS填充或沒有填充(要求輸入是塊長度的倍數)。

如果你想模擬這個「零填充」,你需要自己追加適量的0,然後選擇無填充選項。