Использовать Zero Padding в OpenSSL? - PullRequest
2 голосов
/ 22 мая 2011

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

Проблема в том, что когда я шифрую строку двумя способами, я получаю два результата различия:

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

Полагаю, это из-за нулевого отступа. Но я не знаю, как использовать заполнение нулями в openssl.

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 22 мая 2011

Openssl не допускает "заполнение нулями", возможно потому, что результат не согласован (что, если последний байт открытого текста равен 0 ...)

Openssl позволит вам использовать либо заполнение PKCSили нет заполнения (для этого требуется, чтобы входное значение было кратно размеру блока по длине).

Если вы хотите эмулировать это «заполнение нулями», вам нужно будет добавить соответствующее количество нулей самостоятельно, изатем выберите вариант без заполнения.

...