Files
Intellix/Intelix.Helper.Sql/BerkeleyDB.cs
T

73 lines
2.2 KiB
C#
Raw Normal View History

2026-08-27 10:55:23 -06:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Intelix.Helper.Sql;
public class BerkeleyDB
{
public List<KeyValuePair<string, string>> Keys { get; }
public BerkeleyDB(byte[] file)
{
List<byte> list = new List<byte>();
Keys = new List<KeyValuePair<string, string>>();
using (MemoryStream input = new MemoryStream(file))
{
using BinaryReader binaryReader = new BinaryReader(input);
int i = 0;
for (int num = (int)binaryReader.BaseStream.Length; i < num; i++)
{
list.Add(binaryReader.ReadByte());
}
}
string text = BitConverter.ToString(Extract(list.ToArray(), 0, 4, littleEndian: false)).Replace("-", "");
int num2 = BitConverter.ToInt32(Extract(list.ToArray(), 12, 4, littleEndian: true), 0);
if (!text.Equals("00061561"))
{
return;
}
int num3 = int.Parse(BitConverter.ToString(Extract(list.ToArray(), 56, 4, littleEndian: false)).Replace("-", ""));
int num4 = 1;
while (Keys.Count < num3)
{
string[] array = new string[(num3 - Keys.Count) * 2];
for (int j = 0; j < (num3 - Keys.Count) * 2; j++)
{
array[j] = BitConverter.ToString(Extract(list.ToArray(), num2 * num4 + 2 + j * 2, 2, littleEndian: true)).Replace("-", "");
}
Array.Sort(array);
for (int k = 0; k < array.Length; k += 2)
{
int num5 = Convert.ToInt32(array[k], 16) + num2 * num4;
int num6 = Convert.ToInt32(array[k + 1], 16) + num2 * num4;
int num7 = ((k + 2 >= array.Length) ? (num2 + num2 * num4) : (Convert.ToInt32(array[k + 2], 16) + num2 * num4));
string text2 = Encoding.ASCII.GetString(Extract(list.ToArray(), num6, num7 - num6, littleEndian: false));
string value = BitConverter.ToString(Extract(list.ToArray(), num5, num6 - num5, littleEndian: false));
if (!string.IsNullOrWhiteSpace(text2))
{
Keys.Add(new KeyValuePair<string, string>(text2, value));
}
}
num4++;
}
}
private static byte[] Extract(byte[] source, int start, int length, bool littleEndian)
{
byte[] array = new byte[length];
int num = 0;
for (int i = start; i < start + length; i++)
{
array[num] = source[i];
num++;
}
if (littleEndian)
{
Array.Reverse(array);
}
return array;
}
}