我已经研究了加密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;
}