У моего вопроса теперь есть связь с этим одним Crypto-Js разным выходом из mcrypt , поэтому я использовал тот же вопрос, но добавил несколько дополнительных строк, чтобы объяснить это лучше.
Основываясь на моем предыдущем вопросе, который решается SIr Jim (большое спасибо за советы, а также). Он работал частично правильно, так как он показывает тот же результат, но только когда я использую слово «Blader», и если когда-либо я использую другое слово, например «CROW», то вывод между двумя скриптами отличается.
Вот код, который дает сэр Джим, который работает как шарм (я использовал Blader здесь)
$encrypted = "Blader\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a"; $iv = base64_decode('AAAAAAAAAAAAAAAAAAAAAA=='); $key = base64_decode('ITU2NjNhI0tOc2FmZExOTQ=='); $plaintext = mcrypt_encrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv ); echo base64_encode($plaintext);
Образец – когда я использую CROW, поскольку данные должны быть закодированы
Вывод в криптографии
dxt3uyk27U3wRRrzaFGiwQ==
Вывод в mcrypt
x9/oeyLZkLkXM7B1Zo+ezg==
Чтобы решить эту проблему, я удалил padding: CryptoJS.pad.Pkcs7
в cryptoJS, но мой вопрос в том, что, если я не хочу удалять заполнение в cryptoJS?
Все ответы будут высоко оценены.
Вам нужно посмотреть, как работает PKCS # 7 . Он приносит открытый текст до кратного 16 байтам. Если он уже равен 16, он добавляет дополнительные 16 байт.
Для «CROW» в UTF-8 (четыре байта) вы добавили бы еще 12 байтов. Каждый байт будет теперь 12, то есть 12 байт из 12, вместо 10 байт 10 для Blader. Например, попробуйте следующее:
$encrypted = "CROW\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c";
Чтобы наложить PKCS # 7, вы можете попробовать что-то вроде этого:
$encrypted = "CROW"; // Add PKCS#7 padding $pad = 16 - (strlen($encrypted) % 16); $encrypted = $encrypted . str_repeat(chr($pad), $pad);
(Я бы назвал переменную чем-то иным, кроме $ encrypted, потому что она никогда не хранит зашифрованные данные.)