【c++】SQLCipher를 도입해 보았다

전 블로그, 【c++】SQLCipher를 도입해 보았다 - 기술은 뜨겁게 치고!

SQLite는 단순한 파일이므로 고급 지식이 있습니다.
사용자에게는 내용을 보거나 개조될 우려가 있습니다.
이 SQLite를 암호화하는 하나의 기법으로서 2008년 8월에 릴리스된 SQLCipher입니다.

Full Database Encryption for SQLite
오픈 소스이며, SAMSUNG나 xerox를 시작해 다양한 기업에 도입되고 있다고 합니다.

오늘은 이것을 도입하는 방법에 대해 씁니다.

무료로 사용하려면



SQLCipher는 유료입니다.
하지만, 그것은 미리 빌드된 라이브러리를 도입하는 경우입니다.
1developer 근처 499 $입니다. (2015/03/10 시점)

하지만 라이센스를 명기한 후 스스로 소스 코드에서 빌드하면 무료로 사용할 수도 있습니다.
그럼, 소스 코드로부터 빌드해 사용해 봅시다!

개발 환경


OS X 10.10.2
XCode6.1.1
C++11

다운로드



openssl



현재 최신은 1.0.2이므로 이것을 다운로드합니다.
$ curl -o openssl-1.0.2.tar.gz http://www.openssl.org/source/openssl-1.0.2.tar.gz
$ tar xzf openssl-1.0.2.tar.gz

SQLCipher


$ git clone https://github.com/sqlcipher/sqlcipher.git

openssl-xcode


$ git clone https://github.com/sqlcipher/openssl-xcode.git

경로 추가



Xcode에서 [Xcode] - [Preferences] - [Locations] - [Source Trees]에 다음을 추가합니다.

[이름] - OPENSSL_SRC
[디스플레이 이름] - OPENSSL_SRC
[Path] - (예) $(PROJECT_DIR)/../libs/openssl-1.0.2

Locations_example

프로젝트 추가



git로 clone 한 폴더의 xcodeproj를 프로젝트에 추가합니다.
이 때,
드래그 앤 드롭 대신 프로젝트를 마우스 오른쪽 버튼으로 클릭 - Add Files to "ProjectName"으로 추가하십시오.

그리고 target에 체크가 되어 있는 것을 확인하고 Add를 클릭합니다.

Build Phases 설정



Target Dependencies



[Project] - [Build Phases] - [Target Dependencies]에서
crypto와 sqlicipher를 추가합니다.

Add_items

Link Binaries With Libraries



[Project] - [Build Phases] - [Link Binaries With Libraries]에서 libcrypto.a 및 libsqlicipher.a를 추가합니다.

Add_frameworks_and_libraries

C 플래그 설정



[Project] - [Build Settings] - [Other C Flags]의 모든 Build Configuration 분 -DSQLITE_HAS_CODEC를 추가합니다.

other_c_flags

빌드!



여기까지 있으면 빌드해 보세요.
잘 설정되어 있으면 컴파일은 통과할 것입니다.

코드로 소개



매우 간단합니다.
string dbName = "test.db";
auto filePath = FileUtils::getInstance()->getWritablePath() + dbName;

auto status = sqlite3_open(filePath.c_str(), &db);
string key = "v179g41b3u14b8710fb23fb38";
sqlite3_key(db, key.c_str(), static_cast<int>(strlen(key.c_str())));

데이터베이스를 열고 sqlite3_key를 실행하면 됩니다.
이 예에서 말하면 v179g41b3u14b8710fb23fb38이 암호입니다.

주의



하나만 주의가 있습니다.

당연하다고 말하면 당연하지만,
위에서 설명한 sqlite3_key는 database 작성시 실행되어야 합니다.
즉, 작성되고 있는 database에 도중부터 SQLCipher를 채울 수 없습니다.

그래서, 이제 SQLite를 이용하는 앱을 릴리스하고 있을 때는 한 번 필요할지도 모르겠네요.

누군가의 도움이 되면.

좋은 웹페이지 즐겨찾기