2

対称および非対称キー暗号化、暗号、ハッシュなど、sqlliteデータベースを暗号化するさまざまな方法を調べましたが、フラッシュビルダー用の多くのsqlliteデータベースを暗号化するために使用するのに最適な方法はわかりません-私が作成しているAndroidアプリケーション。

プロセスは、クライアントが私が働いている会社によって指定された多くのデータベースを (ローカルに) 作成できるということです。データベースごとに、ユーザーがアプリの外部からデータベースにアクセスできないようにする必要があります。(私は - SqlConn.open(Encrypt...) を使用してこれを行うことができました) したがって、データベースを暗号化して、ユーザーがアクセスできないようにします。

最善の方法、つまり暗号化するキーを作成するために使用する方法についてのアイデアは、暗号化キーはバイト配列で、長さが 16 ビットである必要があります。

ユーザーがデータベースの 1 つをファイナライズするとき、つまりアプリでデータベースを選択するときに、データベースをサーバーにアップロードして、データベースを復号化し、それに応じてデータを操作できるようにしたいと考えています。

私の質問は、アプリ内でキーを正常に作成し、アップロード後に転送して、php を使用して復号化するにはどうすればよいですか? (どのような方法がうまくいきますか?)

前もって感謝します!

4

2 に答える 2

0

キーのActionScript側でのハッシュ(暗号化ではない)は、as3coreLibを使用して実行できます。md5、 SHA224 などを提供します。誰かがそれを示すためにミニアプリを作りました。

しかし、確かに、それは絶対に安全またはクラックできないわけではありません。詳細については、たとえば、ウィキペディアの「レインボーテーブル」を参照してください。

于 2012-06-19T16:21:35.573 に答える
0

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) モード。

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 に答える