2

我研究了加密 sqllite 数据库的各种方法,例如对称和非对称密钥加密、密码和哈希,但我不知道哪种方法最适合用于为 flash builder 加密许多 sqllite 数据库 - 我正在制作的 android 应用程序。

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

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

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

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

提前致谢!

4

2 回答 2

0

可以使用as3coreLib在 ActionScript 端对密钥进行散列(不是加密), 它提供 md5、SHA224 等。有人做了一个小应用程序来演示它..

但可以肯定的是,它不是绝对安全或不可破解的。例如,在 Wikipedia 上查找“Rainbow tables”以获取更多信息。

于 2012-06-19T16:21:35.573 回答
0

这是我在研究 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)

这是生成安全密钥的逻辑(在动作脚本中):

    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;
    }
于 2012-11-02T18:48:42.493 回答