什么方法可以加密SQLite数据库,以便在PHP服务器上使用


What method would be right to encrypt SQLite databases, for use on a PHP server?

我已经研究了加密sqllite数据库的各种方法,例如对称和非对称密钥加密,密码和哈希,但是我不知道哪种方法最适合用于加密闪存生成器的许多sqllite数据库 - 我正在制作的Android应用程序。

这个过程是客户可以制作许多由我工作的公司指定的数据库(本地)。对于每个数据库,我需要阻止用户从应用程序外部访问数据库(我已经设法使用 - SqlConn.open(Encrypt...))因此,我对数据库进行加密以阻止用户访问它。

关于最佳方法的任何想法,即使用什么方法来创建要加密的密钥,加密密钥必须是字节数组并且长度等于 16 位。

当用户完成其中一个数据库时,即在应用程序上选择数据库,我希望他们将其上传到服务器,在那里他们可以解密数据库并相应地操作数据。

我的问题是,如何在应用程序中成功制作密钥,上传后传输并使用 php 解密?(什么方法会起作用?

提前感谢!

可以在 ActionScript 端对密钥进行哈希(非加密)使用 as3coreLib它提供md5,SHA224等。有人做了一个迷你应用程序来演示它。

但可以肯定的是,它不是绝对安全或不可破解的。例如,在维基百科上查找"彩虹表"以获取更多信息。

这是我在研究 air 的加密方法时发现的一篇文章。

http://help.adobe.com/en_US/AIR/1.5/devappsflex/WS34990ABF-C893-47ec-B813-9C9D9587A398.html

这是加密的

规范:高级加密标准(AES),带有CBC-MAC(CCM)模式的计数器。

在PHP中,你可以使用mcrypt库。

mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, base64_decode($encrypted), MCRYPT_MODE_CBC, $iv)

以下是生成安全密钥的逻辑(它在ActionScript中):

    public static function getEncryptionKey(password:String):ByteArray
    {
        var bytes:ByteArray = new ByteArray();
        bytes.writeUTF(password + "password salt");
        bytes.position = 0; // have to reset to 0 for an accurate hash
        var hashedKey:String = SHA256.computeDigest(bytes);
        var encryptionKey:ByteArray = generateEncryptionKey(hashedKey);
        return encryptionKey;
    }
    private static function generateEncryptionKey(hash:String):ByteArray
    {
        var result:ByteArray = new ByteArray();
        // select a range of 128 bits (32 hex characters) from the hash
        // In this case, we'll use the bits starting from position 17
        for (var i:uint = 0; i < 32; i += 2)
        {
            var position:uint = i + 17;
            var hex:String = hash.substr(position, 2);
            var byte:int = parseInt(hex, 16);
            result.writeByte(byte);
        }
        return result;
    }