PHP 코드에 PKCS7 패딩을 적용하려고합니다. 나는 블록 크기는 16 바이트가 될 것으로 예상된다PHP PKCS7 패딩 버그
https://gist.github.com/Halama/5956871
이 요지를 내 코드를 산출했다. 데이터는 "password"이며 길이는 8 바이트입니다. 패드를 가져온 후에는 암호화 할 데이터 끝에 패드를 추가합니다.
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, $thisMCRYPT_MODE_CBCmode);
$pad = $blockSize - (strlen($data) % $blockSize);
$data = $data . str_repeat(chr($pad), $pad);
문제는 데이터가 실패 할 곳을 해독하는 것을 인스턴스 (많은)가있다.
아래에 base64로 인코딩 된 샘플 데이터가 제공됩니다. 상기 디코딩 된 샘플들의 처음 16 바이트는 IV를 나타내는
작업 : cjg1RYWxlc8bDH2de43t0bv1ug36i8ayjWDQTela938 = (패드 길이 : 8)이 작동하지
: 9wWI + MyYj5ZVj2sC4xr7EgOsgNSoeTZW1yM8ddmqg18 = (패드 길이 122)
이 패드 길이는 다음을 사용하여 검색됩니다.
$pad = ord($data[strlen($data) - 1]);
mcrypt_enrypt를 사용하여 "password"문자열을 암호화하고 있습니다. 내가 Mcrypt 라이브러리를 위해 사용하고 열쇠는
lGbsVE + qVO1P2ue0iCjrTPMU5hKX9aHE7r1aUUeqFag =
실패? 당신은 "잘못된 키를 사용하여 .. 암호 텍스트가 손상되었습니다"라는 오류를 언급하고 있습니까? 또는 "블록 크기보다 높은 패딩 값"오류를 언급하고 있습니까? 질문에서 언급 한 열쇠가 맞습니다. 두 샘플을 모두 암호화하는 데 사용한 것과 동일한 키입니다. – kapitanluffy
사용중인 패딩/패딩 구성표가 다소 평범한 것 같습니다. 필자가 잘못 생각하지 않는다면, 마지막 바이트가 122 인 경우에만 잘못된 결과를 얻을 수 있습니다. 확인하기가 쉬워야합니다.* 평문에 '00'값이있는 문자가 포함 된 경우 어떻게 될지 100 % 확신하지 못합니다. * –
"이 잘못된 결과 만 가능"할 수 있다는 것은 무엇을 의미합니까? – kapitanluffy