hello, when I use sqlite3_key to crypt my sqlite database "my.db" and the key
is "abc",
and when I use sqlitespy to open the database, then sqlitespy require me to
input the key,
when I input "abc" to it,but show me couldn't open the database, I don't know
why,
these following function is the source:
1:
j = sqlite3_key(db, argv[1], 2);
2:
j = sqlite3_rekey(db,NULL, 0 );
3:
int sqlite3_key(sqlite3 *db, const void *zKey, int nKey)
{
/* The key is only set for the main database, not the temp database */
return sqlite3CodecAttach(db, 0, zKey, nKey);
}
4:
int sqlite3CodecAttach(sqlite3* db, int nDb, const void* zKey, int nKey)
{
/* Attach a key to a database. */
Codec* codec = (Codec*) sqlite3_malloc(sizeof(Codec));
CodecInit(codec);
/* No key specified, could mean either use the main db's encryption or no
encryption */
if (zKey == NULL || nKey <= 0)
{
/* No key specified */
if (nDb != 0 && nKey > 0)
{
Codec* mainCodec = (Codec*)
mySqlite3PagerGetCodec(sqlite3BtreePager(db->aDb[0].pBt));
/* Attached database, therefore use the key of main database, if main
database is encrypted */
if (mainCodec != NULL && CodecIsEncrypted(mainCodec))
{
CodecCopy(codec, mainCodec);
CodecSetBtree(codec, db->aDb[nDb].pBt);
#if (SQLITE_VERSION_NUMBER >= 3006016)
mySqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt),
sqlite3Codec, sqlite3CodecSizeChange, sqlite3CodecFree, codec);
#else
#if (SQLITE_VERSION_NUMBER >= 3003014)
sqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt), sqlite3Codec,
codec);
#else
sqlite3pager_set_codec(sqlite3BtreePager(db->aDb[nDb].pBt),
sqlite3Codec, codec);
#endif
db->aDb[nDb].pAux = codec;
db->aDb[nDb].xFreeAux = sqlite3CodecFree;
#endif
}
else
{
CodecSetIsEncrypted(codec, 0);
sqlite3_free(codec);
}
}
}
else
{
/* Key specified, setup encryption key for database */
CodecSetIsEncrypted(codec, 1);
CodecSetHasReadKey(codec, 1);
CodecSetHasWriteKey(codec, 1);
CodecGenerateReadKey(codec, (char*) zKey, nKey);
CodecCopyKey(codec, 1);
CodecSetBtree(codec, db->aDb[nDb].pBt);
#if (SQLITE_VERSION_NUMBER >= 3006016)
mySqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt), sqlite3Codec,
sqlite3CodecSizeChange, sqlite3CodecFree, codec);
#else
#if (SQLITE_VERSION_NUMBER >= 3003014)
sqlite3PagerSetCodec(sqlite3BtreePager(db->aDb[nDb].pBt), sqlite3Codec,
codec);
#else
sqlite3pager_set_codec(sqlite3BtreePager(db->aDb[nDb].pBt), sqlite3Codec,
codec);
#endif
db->aDb[nDb].pAux = codec;
db->aDb[nDb].xFreeAux = sqlite3CodecFree;
#endif
}
return SQLITE_OK;
}
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users