2011-01-07 6 views
5

소스에서 몇 가지 dll을 만들었습니다. 이들은 주로 같은 소스 인 sqlite-3.6.22, Open SSL 0.9.8 및 sqlcipher에 있습니다.플랫폼간에 SQLite 암호화가 다릅니다.

내가 2 개를 만든 이유는 C++ 프로젝트로 작업하고 Java 용 JDBC 드라이버 (Java jni dll)로 작업해야하기 때문입니다.

이제 저는 두 개의 DLL을 가지고 있습니다. C++ 및 C# (C를 사용하여)에서 데이터베이스를 작성하고 작성할 수 있으며 java에서도 마찬가지입니다. 이 두 가지 모두 내가 예상 한대로 응답합니다. 올바른 암호를 입력하면 열 수 있고 잘못 입력하면 실패 할 수 있습니다. 이론 상으로는 aes-256-bit로 하드 코드 된 sqlcipher의 기본값이어야합니다. cbc. 그러나 다른 데이터베이스로 만든 데이터베이스를 열 수 없습니다. SQLite3 Management 스튜디오에서 C 버전으로 만든 데이터베이스를 열 수는 있지만 RSA를 선택한 상태에서 암호 만 입력하면 java에있는 항목을 다른 항목으로 열 수 없습니다.

다른 점은 c 데이터베이스와 동일한 내용의 두 데이터베이스를 만들면 바이트가 동일하지만 자바는 그렇지 않다는 것입니다.

나는 분명히 잘못된 것을하고 있지만, 실제로는 볼 수 없다. 나는 자바가 어떤 이유로 디버깅하기 쉽도록 잘 볼 수있는 한 멀리 볼 수있다.

+0

'differening'의 끔찍한 오타를 용서하십시오! – Woody

+0

내 질문과 관련이 있는지 확실하지 않습니다. byte-for-byte가 동일한 두 개의 암호화되지 않은 데이터베이스를 Java로 생성 할 수 있습니까? –

+0

본인의 오타가 수정되었습니다. – CraigTP

답변

1

아주 조금 실망스럽고 오늘 당장 돌아 왔으므로이 시간을두고 나가십시오. sqlite3.dll을 디버깅하면 대답이 나옵니다.

Java에서 JDBC를 통해 액세스하는 경우 byte [] 암호의 키 기능이 없으므로 PRAGMA key = ''명령문을 통해 암호를 입력해야합니다. 문서에서 볼 때 이것들은 동등하고 바이너리 키가 필요하다면 16 진수로 인코딩하고 "x '"를 맨 앞에 놓습니다. 그래서 자바에서 나는했다 : C#에서 내가 바이트 배열에서 그 이진수를 사용했다

PRAGMA key="x'899e7c6475756d887a759a93a0a3979a62827e85919898a49394a29c7b88aa8a" 

반면.

문자열이 암호 (42 자 암호)로 사용된다는 사실이 밝혀졌습니다.

그래서 Java에서 사용할 수없는 바이너리 암호를 원하지 않는 한 pragma 또는 key 메서드를 사용하여 java에서 데이터베이스를 만들고 C# 및 그 반대로 읽을 수 있습니다.

내가 필요한 방법을 맞춰보세요!

+0

나는 지금 너와 같은 배에있다. 어떻게하면 JDBC와 C#을 통해 액세스 할 수있는 암호화 된 sqlite 데이터베이스를 만들었습니까? –

관련 문제