2011년 8월 29일 월요일

JAVA - PHP 간 AES encryption 데이터 송수신에서 패딩으로 망하기

자바에서 encryption한 데이터를 php로 전달했을 때 패딩에 의해서 문제가 생길 수 있다.

AES 등의 암호화 알고리듬은 데이터를 특정 사이즈의 블록 단위로 암호화한다. 예를 들어서 블록의 사이즈가 32kb인데 암호화하려는 스트링은 50kb라면, 32kb * 2 = 64kb를 맞추도록 뒷부분을 패딩으로 채워넣는다.

이 패딩 방식이 php는 null 패딩이며, 자바의 경우에는 몇 가지 패딩 방식을 지원하지만 php의 null 패딩은 포함되지 않는다. 결론은


1. 자바에서 직접 null padding을 구현하거나
2. php에서 PKCS5 패딩을 제거하거나.


1의 경우에 사용 알고리듬에 따라서 사이즈가 딱 맞는 블록을 어레이로 선언하고 나머지를 null값으로 채워주면 되겠고, 후자의 경우에

<?php
$decrypted = mdecrypt_generic($td, base64_decode($enc_auth_token));
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
?>


처럼 처리해 주면 될 것이다.

2011년 8월 18일 목요일

sqlite3에서 vacuum으로 rowid 말아먹기

sqlite3에서는 rowid라는 컬럼이 int형의 primary key로 존재하는 것이 보장되어 있다. 문제는 vacuum시켰을 때 rowid의 값이 sqlite3에 의해서 임의로 재지정될 수 있다는 점이다.

따라서 MySQL로 치면 autoincrement, int형 PK를 안정적으로 쓰기 위해서는 rowid의 이름을 수동으로 직접 지정해줄 필요가 있다. 안드로이드에서 쓸 거면 어차피 _id로 고정일테니 크게 고민할 거리도 안 될 것이다.

2011년 8월 2일 화요일

jqgrid - 데이터 받아오기

자바스크립트가 url로 날리는 리퀘스트를 잘 정리한 페이지가 없음.



name
내용
page돌려받고자 하는 페이지
rows페이지 당 몇 행인지
sidx소팅하는 기준이 되는 인덱스
sord내림차순(desc) or 오름차순(asc) 쿼리문에 직접 삽입 가능함


대신 다음과 같은 php 코드를 예제로 보여주고 있음. 나는 post를 선호하지만 그건 각자 알아서;;
<전략>
// Get the requested page. By default grid sets this to 1.
$page = $_GET['page'];

// get how many rows we want to have into the grid - rowNum parameter in the grid
$limit = $_GET['rows'];

// get index row - i.e. user click to sort. At first time sortname parameter -
// after that the index from colModel
$sidx = $_GET['sidx'];

// sorting order - at first time sortorder
$sord = $_GET['sord'];

// if we not pass at first time index use the first column for the index or what you want
if(!$sidx) $sidx =1;

전체 예제코드는 여기.



데이터 수정시 서버에 날리는 request가 정리된 페이지가 없음



name 내용
name:value pair 이름:값의 짝들. colModel에서 설정한 name
id:rowid id로 설정된 값. 대개의 경우에는 pk일 것이다.
oper:edit(add|del) 데이터 변경 종류. 수정, 추가, 삭제
editData return
onclickSubmit return

구글 앱스 스크립트용 GUI 빌더





자바 스크립트로 이런 짓까지 하는 녀석들은 구글 외에는 없겠지;;