PHP 바이너리 1바이트씩 자르기

분류없음 2015.12.19 15:51 Posted by Relipmoc

파이썬 백엔드에서 json 데이터를 AES encrypt를 한 후에 base64로 인코딩해서 php 백엔드로 보낸 뒤, php에서 복호화해서 그 데이터를 사용하는 코드를 짜려고 했었다. 기본으로 전송하는 데이터가 AES encrypted data뿐만이었으면 별 상관없이 mcrypt에 던지면 됐겠지만 바이너리에 다른 것도 덧붙였더니 substring할 일이 생겼다. php에서는 파이썬처럼 [n:m] 하면 1바이트씩 잘리는 게 아니기 때문에 substr이 아닌 mb_substr을 써야한다고 들었지만, 이건 multibyte support일 뿐이고, 마지막 인자에  "8bit"을 던져줘야 정확히 1바이트씩 잘린다.


function aes_decrypt($string) {

$string = base64_decode($string);

$iv = "";

$options = mb_strcut($string, 0, 128, "8bit");

$string = mb_substr($string, 128, mb_strlen($string, "8bit")-128, "8bit");

$key = "";

return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv), "\0\3");

}


이처럼 말이다.



저작자 표시
신고

안정적인 DNS서비스 DNSEver

분류없음 2014.05.12 17:19 Posted by Relipmoc
안정적인 DNS서비스 DNSEver
저작자 표시
신고

기본적으로 CentOS는 blktap 커널 모듈을 따로 제공해 주지 않기 떄문에 따로 컴파일을 해줘야 한다.


그래서 Ubuntu, Debian 레포에 있는 blktap-dkms 패키지의 소스를 받아 컴파일을 해줘야 하는데, 이 모듈엔 kernel 3.7부터 사라진 VM_RESERVED를 쓰고 있기 때문에 다른 것으로 교체를 해줘야 한다. 


패치된 코드는 https://github.com/relip/blktap-dkms 에서 받으면 된다. 


설치 방법은 비교적 간단한데, 문제는 이 코드는 커널 소스를 필요로 해서 CentOS의 경우 기본적으로 커널 소스가 깔려있지 않기 때문에 따로 SRPM을 받아서 설치하든 해서 /usr/src/kernels에 넣어준 후 README에 있는대로 컴파일하면 된다.


그리고 insmod blktap.ko 하면 끝 

저작자 표시
신고


 

티스토리 툴바