如何在.Net内核中将内存流或字节数组转换为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

我有一个.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).
    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中工作