V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gdtv
V2EX  ›  PHP

请问有没有支持加密功能的单文件数据库?

  •  
  •   gdtv · Feb 4, 2017 · 4758 views
    This topic created in 3375 days ago, the information mentioned may be changed or developed.

    想用 php 开发一个在线记事本,记录一些非常私密的东西,首要要求是服务器被入侵后黑客也无法读取到我的文章内容.
    所以想要找一个支持加密功能的单文件数据库,例如 sqlite3,但是免费版本的 sqlite3 不支持加密功能.
    请问有没有类似 sqlite3 的其他的免费的支持加密功能的数据库呢?
    性能不重要,自己一个人用的.

    Supplement 1  ·  Feb 4, 2017
    初步决定用 4 楼的方法,加密入库,搜索的时候遍历一次数据库,逐条记录解密后查找,因为个人使用数据量不会太大,并且搜索不会很频繁,所以搜索的性能问题可以接受
    41 replies    2017-03-09 00:11:02 +08:00
    honeycomb
        1
    honeycomb  
       Feb 4, 2017 via Android
    keepass 数据库格式?
    SingeeKing
        2
    SingeeKing  
    PRO
       Feb 4, 2017 via iPhone
    非对称加密就可以了吧
    yexiaoxing
        3
    yexiaoxing  
       Feb 4, 2017
    换个思路,在 php 做加解密?
    SuperMild
        4
    SuperMild  
       Feb 4, 2017   ❤️ 1
    php 加密后入数据库,缺点是不能搜索,但由于是一个人用数据量很小,可以每次把整个数据库读出来解密后放进一个临时数据库,这样就能搜索了,用完删除临时数据库。
    springz
        5
    springz  
       Feb 4, 2017   ❤️ 1
    DES 加密后密文存进数据库呗,你自己掌握 key
    ryd994
        6
    ryd994  
       Feb 4, 2017 via Android
    换个思路, luks
    自己要用再挂载
    cnwtex
        7
    cnwtex  
       Feb 4, 2017 via iPhone
    只要 PHP 能读写,入侵的人就能读写,这种场景谈什么加密
    wwqgtxx
        8
    wwqgtxx  
       Feb 4, 2017
    最简单的办法,在网页端用 JS 加密,密码自己掌握即可,就算破了你的服务器也拿不到有用的数据
    zjgsamuel
        9
    zjgsamuel  
       Feb 4, 2017
    额~~ 最近也在构思自己的一个日记应用 有类似场景的需求 LZ 找到好的解决方案 记得分享一下哈~
    missdeer
        10
    missdeer  
       Feb 4, 2017
    基于 sqlite3 的 sqlcipher 有免费版本的
    gdtv
        11
    gdtv  
    OP
       Feb 4, 2017
    @springz DES 加密后密文存进数据库呗,这样在数据库里就无法全文搜索了,就无法搜索文章了
    gdtv
        12
    gdtv  
    OP
       Feb 4, 2017
    @yexiaoxing 在 php 做加解密,这样在数据库里就无法全文搜索了,就无法搜索文章了
    gdtv
        13
    gdtv  
    OP
       Feb 4, 2017
    @missdeer sqlcipher 有看过,但我不太熟悉 linux 配置,试过编译 sqlcipher 没成功
    gdtv
        14
    gdtv  
    OP
       Feb 4, 2017
    @wwqgtxx 请问网页端用 JS 加密是什么意思?可以再说说吗?
    xenme
        15
    xenme  
       Feb 4, 2017 via iPhone
    @gdtv 发送的是加密后的内容啊
    gdtv
        16
    gdtv  
    OP
       Feb 4, 2017
    @SuperMild 你说的方案我也有考虑过,但我怕数据量太大。另外放进一个临时数据库,万一没来得及删除服务器就被黑了。。。。
    gdtv
        17
    gdtv  
    OP
       Feb 4, 2017
    @xenme 这样在数据库里就无法全文搜索了,就无法搜索文章了
    mogging
        18
    mogging  
       Feb 4, 2017 via iPhone
    @missdeer 微信就是用这个加密的,以前有老外写过详细的技术文章
    grayon
        19
    grayon  
       Feb 4, 2017
    全文搜索你怎么做?分词做索引啊
    springz
        20
    springz  
       Feb 4, 2017
    BerkeleyDB
    gdtv
        21
    gdtv  
    OP
       Feb 4, 2017
    @grayon 全文搜索,直接用 like ,因为数据量小性能不是问题
    grayon
        22
    grayon  
       Feb 4, 2017
    用移位加密或者替换加密就好了
    SuperMild
        23
    SuperMild  
       Feb 4, 2017 via iPhone
    @gdtv 一个人用数据量应该不大,临时数据库可以放在客户端 js 里,服务器的数据库一直只储存加密后的文本。
    gdtv
        24
    gdtv  
    OP
       Feb 4, 2017
    @SuperMild 我看了我的谷歌文档,几年来一共有 100M 的 word 文档,如果换成 txt ,估计至少要 20M 吧, 20M 的东西塞在 js 里可以吗? 另外放 js 里似乎更不安全吧,有时在别人的电脑上网, js 会留在别人的电脑缓存里。
    wwqgtxx
        25
    wwqgtxx  
       Feb 4, 2017
    @gdtv 就是你在浏览器端用 JS 来进行 AES 加密之后再保存到服务器,这样谁拿到服务器都没啥用,当然,这样你就没法在服务器端全文搜索了
    SuperMild
        26
    SuperMild  
       Feb 4, 2017
    @gdtv 20M 小意思,现在宽带下载也很快,但是用手机流量访问时太费流量。缓存的问题应该可以通过设过期时限来解决吧(未确认),不过如果能在服务端用原生支持加密的数据库当然是最好的。
    guxin0123
        27
    guxin0123  
       Feb 4, 2017
    ms access ???
    lslqtz
        28
    lslqtz  
       Feb 4, 2017 via iPhone
    Windows BitLocker
    要用的时候 exec 解密,否则加密
    根据传入的密码来,但是也不是绝对安全的,因为可以修改文件抓密钥
    lslqtz
        29
    lslqtz  
       Feb 4, 2017 via iPhone
    @wwqgtxx 拿到服务器修改 JS ,将密码发往服务器一份。
    lslqtz
        30
    lslqtz  
       Feb 4, 2017 via iPhone
    建议用 HTML+AES+Chrome 扩展(读取 /写入本地文件)或 localStorage (注意备份)做成单机版的
    phithon
        31
    phithon  
       Feb 4, 2017   ❤️ 1
    免费版本的 sqlite3 其实是预留了加密、解密接口的。
    给你一个我大二时候写的密码管理器,代码乱七八糟的别吐槽,但其中有 sqlite3 的加密实现,这个软件的登录密码其实就是 aes 的密钥。
    https://github.com/phith0n/PasswordKeeper
    这个库就是一个 dll ,理论上用什么语言操作都不影响,但我没试过用 PHP 行不行。
    Khlieb
        32
    Khlieb  
       Feb 4, 2017 via Android
    HSQLDB?
    gdtv
        34
    gdtv  
    OP
       Feb 4, 2017
    @limhiaoing 这个是收费的
    jimzhong
        35
    jimzhong  
       Feb 5, 2017
    请问 LZ 的密钥如何存储呢?是由用户在每次加密 /解密时提供还是存在服务器上?
    gdtv
        36
    gdtv  
    OP
       Feb 5, 2017
    @jimzhong 密钥由用户在每次登录网站的时候输入,也就是网站的登录密码,登录成功后将密钥加密存放到 cookie 里。网站启用 https 。
    jimzhong
        37
    jimzhong  
       Feb 5, 2017
    @gdtv cookie 容易被盗用,用服务端的 session 会不会更好一些?
    gdtv
        38
    gdtv  
    OP
       Feb 5, 2017
    @jimzhong 用 session 好些
    nilai
        39
    nilai  
       Feb 5, 2017
    SQLCipher +1
    xieranmaya
        40
    xieranmaya  
       Feb 5, 2017
    @lslqtz 这个思路很不错啊,我第一反应也是这么做。每次修改数据后把加密后的数据全量备份到 vps 上去,甚至扔 github 上都行
    czb
        41
    czb  
       Mar 9, 2017 via Android
    ABC.li 这个网站的思路估计和你的差不多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   969 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 94ms · UTC 23:40 · PVG 07:40 · LAX 16:40 · JFK 19:40
    ♥ Do have faith in what you're doing.