【问题标题】:What method would be right to encrypt SQLite databases, for use on a PHP server?什么方法适合加密 SQLite 数据库,以便在 PHP 服务器上使用?
【发布时间】:2012-06-21 13:06:05
【问题描述】:

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

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

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

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

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

提前致谢!

【问题讨论】:

  • 我不清楚您的问题是关于 Flex/AIR 还是 PHP。你会用你的移动应用程序分发 SQLLite 数据库吗?在这种情况下 PHP 无关紧要,或者您会将加密的数据库存储在应用程序服务器上,在这种情况下 Flex/AIR 无关紧要?
  • flex/air 和 php 都被编程,从应用程序中获取数据库,加密,并在 php 中解密它们,因此反转算法/方法的交叉兼容性至关重要。数据库将始终在客户端设备上,但当它们需要处理时,它们将在服务器上传输和操作
  • 那么,您要向 Web 服务器发送数据库吗?从这个问题中我根本不清楚。但重新阅读它;你确实说明了。不过,我没有知识可以帮助你。祝你好运!
  • 还是谢谢你,知道有人可以帮忙吗?
  • 只有我,还是无法对 flex-AIR 应用程序进行反编译/解码?我知道闪存/SWF 可以。因此,如果该人真的想要,您添加到弹性应用程序的任何安全性都可以被绕过。保护数据库的唯一方法是将其放在 PHP 后面的您自己的服务器上。

标签: php flash apache-flex sqlite encryption


【解决方案1】:

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

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

这是加密规范:Advanced Encryption Standard (AES) with Counter with CBC-MAC (CCM) mode。

在 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;
    }

【讨论】:

    【解决方案2】:

    可以在 ActionScript 端对密钥进行散列(不是加密) 与as3coreLib 它提供 md5、SHA224 等。 有人发了mini app 来演示一下..

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

    【讨论】:

      猜你喜欢
      • 2010-11-06
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2012-07-25
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多