sqlcipher - Error: file is not a database

本文介绍了在使用SQLCipher遇到'fileisnotadatabase'错误时的解决方案,问题根源在于解密工具与加密文件版本不匹配。解决方法包括升级数据库到SQLCipher4版本,通过cipher_migration进行数据库迁移,并详细步骤指导如何打开并操作解密后的数据库文件。
摘要由CSDN通过智能技术生成
sqlcipher - Error: file is not a database

    既然我们已经获得了加密数据库的密码,但是为什么还是打不开数据库文件呢?这个问题在sqlcipher事件讨论中得到了解答:

  • 问题描述: Error: file is not a database-加密数据库文件打不开

  • 问题解决: Upgrading to SQLCipher 4-将数据库文件升级到4版本

    一、问题解决:

    出现这个错误的原因是 解密的工具和加密文件的工具版本不一致 导致的,我们下载的 sqlcihper 源码是4.33版本的,而我们的数据库文件是由 sqlcihper3 加密得到的。sqlcipher4不提供对1-3数据库文件的解密。

    1.1 sqlcipher版本查看:

    $ sqlcipher --version
    $ sqlcipher /home/apple/shared_nfs/EnMicroMsg.db
    sqlite> PRAGMA cipher_version;
    sqlite> PRAGMA key = 'yourkey';
    

    1.2 问题的解决:

    ​ 进行数据库文件迁移(cipher_migration),这个操作只需要进行一次,将数据库文件变成适合四版本的db文件。

    sqlite> PRAGMA key = 'yourkey';
    # 这个操作需要等待一些时间,命令行输出0即表示数据文件迁移成功
    sqlite> PRAGMA cipher_migrate;
    # 查看数据库是否解密成功
    sqlite> SELECT count(1) FROM sqlite_master;
    sqlite> .q
    

    1.3 创建明文数据库:

    在以后进行数据库操作前,首先设置密码,或者第一次进入就设置好。

    # 进入EnMicroMsg.db所在目录
    $ sqlcipher
    sqlite> .open/home/apple/shared_nfs/EnMicroMsg.db		   # 打开已有数据库
    sqlite> PRAGMA key = 'yourkey';							   # 首先输入密码
    sqlite> .output 'MicroMsg.sql'                             # 转储/备份 数据库前先指定输出文件
    sqlite> .dump                                              # 备份数据库
    sqlite> .open DeMicroMsg.db                                # 打开一个新的数据库, 无则创建
    sqlite> .read 'MicroMsg.sql'                               # 执行sql文件,恢复到空数据库
    sqlite> .databases                                         # 查看数据库列表
    sqlite> SELECT count(1) FROM sqlite_master;				   # 执行SQL语句
    sqlite> .q												   # 退出
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值