如何在.Net内核中将内存流或字节数组转换为SqLite DB?
我有一个.NetCore控制台应用程序,它使用SqLite DB。 我将使用.NetCore加密库加密/解密磁盘中的DB文件 我很难理解如何将内存流(或字节[])转换为SqLite DB 考虑以下代码片段:如何在.Net内核中将内存流或字节数组转换为SqLite DB?,sqlite,.net-core,Sqlite,.net Core,我有一个.NetCore控制台应用程序,它使用SqLite DB。 我将使用.NetCore加密库加密/解密磁盘中的DB文件 我很难理解如何将内存流(或字节[])转换为SqLite DB 考虑以下代码片段: static void Main(string[] args) { var filePath = @"EncryptedTestDB.db"; // Create a key (shared key between sender and reciever
static void Main(string[] args)
{
var filePath = @"EncryptedTestDB.db";
// Create a key (shared key between sender and reciever).
byte[] key, iv;
using (Aes aesAlg = Aes.Create())
{
key = aesAlg.Key;
iv = aesAlg.IV;
}
var connSB = new SqliteConnectionStringBuilder();
connSB.DataSource = "./TestDB.db";
// Create an in memory Sqlite DB
using (var conn = new SqliteConnection("ConnectionString"))
{
conn.Open();
var createTableCmd = conn.CreateCommand();
createTableCmd.CommandText = "CREATE TABLE favorite_beers(name VARCHAR(50))";
createTableCmd.ExecuteNonQuery();
// Convert from DB to either Byte[] or Stream???
Stream inStream = CreateStreamFromSqLiteDB(conn);
// Encrypt DB and write to disk
EncyrptionHelper.Encrypt(filePath, inStream, key, iv);
conn.Close();
}
Console.WriteLine("Press Any Key");
Console.ReadKey(true);
var outStream = EncyrptionHelper.DecryptFile(filePath, key, iv);
SqliteConnection conn1 = CreateInMemorySqLiteDBFromStream(outStream);
// Read some stuff from DB
conn1.Close();
Console.WriteLine("Press Any Key");
Console.ReadKey(true);
}
private static SqliteConnection CreateInMemorySqLiteDBFromStream(Stream outStream)
{
// ???
}
private static Stream CreateStreamFromSqLiteDB(SqliteConnection conn)
{
// ???
}
static internal class EncyrptionHelper
{
internal static void Encrypt(string filePath, Stream inStream, byte[] key, byte[] iv)
{
using var aesAlg = Aes.Create();
aesAlg.Key = key;
aesAlg.IV = iv;
var encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
// Do I need to copy to a memory stream????
//using var ms = new MemoryStream();
//inStream.CopyTo(ms);
using var cs = new CryptoStream(inStream, encryptor, CryptoStreamMode.Write);
using (var fs = File.Create(filePath))
{
// Write out File
cs.CopyTo(fs);
}
}
internal static Stream DecryptFile(string filePath, byte[] key, byte[] iv)
{
using var aesAlg = Aes.Create();
aesAlg.Key = key;
aesAlg.IV = iv;
var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using var fs = new FileStream(filePath, FileMode.Open);
var cs = new CryptoStream(fs, decryptor, CryptoStreamMode.Read);
return cs;
}
}
有两件事我不知道怎么做:
1)如何从流或字节[]创建/访问SqLite DB实例CreateInMemorySqLiteDBFromStream()
2)如何将SqLite DB实例/连接转换回流,以便加密并保存到磁盘CreateStreamFromSqLiteDB()
这是一个.NetCore解决方案,因此它必须同时在Windows和Linux中工作