간단한 암호화 클래스를 만들려고하지만 결과 문자열에 비 ASCII 문자가 채워집니다. rtrim(), utf8로 변환, 다른 답변에서 언급 한 등 시도했다. 내가 뭘 놓치고 있니? 다음은 메모장에 결과를 붙여 넣을 때 문자가 ++ 문자 here를 포함PHP 암호화/암호 해독 패딩 된 문자 추가
페이스트 빈을 표시하는 것이다. html로 't'로 표시되지만, 메모장에 복사하면 데이터 후 임의의 비트가 표시됩니다.
class Crypter implements ICrypter {
private $Key;
private $Algo;
public function __construct($Algo = MCRYPT_BLOWFISH) {
$this->Key = substr('key', 0, mcrypt_get_key_size($Algo, MCRYPT_MODE_ECB));
$this->Algo = $Algo;
}
public function Encrypt($data) {
//$iv_size = mcrypt_get_iv_size($this->Algo, MCRYPT_MODE_ECB);
//$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$blocksize = mcrypt_get_block_size('blowfish', 'ecb'); // get block size
$pkcs = $blocksize - (strlen($data) % $blocksize); // get pkcs5 pad length
$data.= str_repeat(chr($pkcs), $pkcs); // append pkcs5 padding to the data
$crypt = mcrypt_encrypt($this->Algo, $this->Key, $data, MCRYPT_MODE_ECB);
return rtrim(base64_encode($crypt));
}
public function Decrypt($data) {
$crypt = base64_decode($data);
$iv_size = mcrypt_get_iv_size($this->Algo, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypt = mcrypt_decrypt($this->Algo, $this->Key, $crypt, MCRYPT_MODE_ECB, $iv);
return rtrim($decrypt);
}
}
나는 당신이 가지고있는'부정확 한 결과를 넣어야한다고 생각합니다. 그러나 만약 당신이 어떤 영역의 '나쁜'문자를 알고 싶다면 그것을 rtrim을위한 2 차 arg로 전달할 필요가 있습니다. 인수가 전달되지 않으면 rtrim은 다른 '이상한'문자가 아닌 공백 문자를 원격으로 시도합니다. – GarouDan
Notepad ++ 변환기에 따라 이진수 '110'의 문자로 나타납니다. 변환기를 사용하여 ASCII로 긴 하이픈으로 나타납니다. – giraffee
'rtrim (base64_encode ($ crypt), "\ x110")'을 시도하고 무슨 일이 일어 났는지 리턴하십시오. '나쁨'결과물도 붙여 넣으십시오. – GarouDan