Вопрос по cryptography, .net, mcrypt, php, aes – Как я могу зашифровать / расшифровать данные, используя режим AES CBC + CTS (кража зашифрованного текста) в PHP?

2

Я должен зашифровать и расшифровать данные в режиме AES CTS (кража зашифрованного текста, иногда называемая AES-XTS) в PHP для взаимодействия с удаленной системой, написанной на платформе .NET. В .NET 4 этот режимподдерживается изначально.

Для PHP я не могу найти решение, основанное на руководстве, mcrypt, похоже, не поддерживает этот режим.

Может ли кто-нибудь объяснить, пожалуйста, разницу между простым CBC и CBC-CTS? Можно ли заставить последний работать в PHP с использованием существующих модулей / библиотек?

Ваш Ответ

2   ответа
1

вы можете найти его с исходным кодомВот.

Более старая реализация автора использовалась вAndroid, Поэтому я думаю, что реализация будет очень многообещающей.

Наконец, после того, как вы загрузили исходный код, проверьте файлaesxam.cЕсть очень хороший пример CTS с CBC для шифрования файлов.

Все кредиты идут вБрайан Гладман.

Брайан Гладман теперь поддерживает свой собственный GitHubрепо для AES.

1

статья вставил мои комментарии, объясняющие

LDn = Decrypt (K, Cn−1). Decrypt the second to last ciphertext block(the second to last 128bit/16 byte chunk chunk), using zeros as IV.

You can do this with the standard PHP mcrypt function, just pass

$second_to_last_cipher=array_slice($your_cipher_text_byte_array,count($your_cipher_text_byte_array)-32,16)

to mcrypt_decrypt with a null Iv

$second_to_last_clear = mcrypt_decrypt"MCRYPT_RIJNDAEL_128",$key,$second_to_last_ciphe)

Cn = Cn || Tail (Dn, B−M). Pad the ciphertext to the nearest multiple of the block size using the last B−M bits of block cipher decryption of the second-to-last ciphertext block.

Copy the last n bytes of the value you just decrypted into the last block of ciphertext.

$n = 16 - ($second_to_last_clear % 16)

Then use array copy to copy the data

Swap the last two ciphertext blocks.

Simply switch the swap the contents of the last and second two last cells in your ciphertext array

Decrypt the ciphertext using the standard CBC mode up to the last block.

make the standard decryption call.

Exclusive-OR the last ciphertext (was already decrypted in step 1) with the second last ciphertext.

Self explanatory.

Truncate the plaintext to the length of the original ciphertext.

Похожие вопросы