在OpenSSL中使用零填充?

时间:2011-05-22 09:46:45

标签: openssl 3des

System.Security.Cryptography.TripleDES允许我像这样使用零填充:

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);

问题是,当我通过两种方法加密字符串时,我收到两个diffences结果:

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

我猜这是因为填充零。但我不知道如何在openssl中使用填充零。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

Openssl不允许“零填充”,可能是因为结果不一致(如果明文的最后一个字节是0 ......会怎么样)

Openssl将允许您使用PKCS填充或不使用填充(这要求输入的长度是块大小的倍数)。

如果你想模仿这个“零填充”,你需要自己附加适当数量的0,然后选择无填充选项。