2017-02-22 25 views
0

Я знаю, что при шифровании данных с openssl_public_encrypt вы не можете зашифровать что-либо большее, чем размер вашего ключа. Это подтверждается также и в PHP документации заметок другими людьми:Как получить максимальное количество бит, которое вы можете зашифровать с помощью openssl_public_encrypt?

http://php.net/manual/en/function.openssl-public-encrypt.php#55901

Теперь я хочу, чтобы бросить исключение, когда кто-то еще пытается сделать это, и я выяснить размер моего ключа, как так:

$keyDetails = openssl_pkey_get_details($this->public); 
$bytes = $keyDetails['bits']/8; 

Это дает мне полные биты, которые у меня есть, но это не учитывает прокладку. Я хочу, чтобы это исключение было динамически изменено, поэтому я хочу использовать открытые ключи разных размеров.

Из PHP документации кто-то уже было отмечен:

Однако стандарт PKCS # 1, который использует OpenSSL, определяет схему обивки (так что вы можете шифровать меньшие количества без потери безопасности), и этой схему обивки занимает не менее 11 байтов (это будет больше, если значение, которое вы шифруете, меньше).

Итак, с помощью стандарта PKCS # 1 я теряю 11 * 8 бит, что означает, что я могу только зашифровать что-то с максимальным размером 936 бит с ключом 1024 бит.

За исключением случаев, когда я не использую этот стандарт. Я использую OPENSSL_PKCS1_OAEP_PADDING. Я не знаю, откуда пришли 11 байтов, я не могу найти его в PHP-коде, где эти константы определены.

Как я могу узнать прописку для моего стандарта и, следовательно, максимальный размер, который я могу зашифровать.

Несмотря на то, что заполнение может меняться в зависимости от размера значения «быть зашифрованным», я хотел бы установить жесткий нижний предел в этом случае (не совсем уверен, если это так).

Cheers.

ответ

1

OAEP Прокладка использует 42 байта доступного пространства.

+0

Нашел его после прочтения некоторых статей. Спасибо за ответ, я сохраню это для будущей ссылки! Приветствия. –

+2

Но только если SHA-1 используется как хэш-функция. Накладные расходы составляют 66 байт для SHA-256 и 130 байтов для SHA-512 или, другими словами: два раза хэш-длина плюс два. Например, phpseclib имеет возможность выбора хэш-функции. –

+0

@ArtjomB. Спасибо, это хорошо знать. –