initial commit
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Intelix.Helper.Hashing;
|
||||
|
||||
public class PBE
|
||||
{
|
||||
private byte[] Ciphertext { get; }
|
||||
|
||||
private byte[] GlobalSalt { get; }
|
||||
|
||||
private byte[] MasterPass { get; }
|
||||
|
||||
private byte[] EntrySalt { get; }
|
||||
|
||||
private byte[] PartIv { get; }
|
||||
|
||||
public PBE(byte[] ciphertext, byte[] globalSalt, byte[] masterPassword, byte[] entrySalt, byte[] partIv)
|
||||
{
|
||||
Ciphertext = ciphertext;
|
||||
GlobalSalt = globalSalt;
|
||||
MasterPass = masterPassword;
|
||||
EntrySalt = entrySalt;
|
||||
PartIv = partIv;
|
||||
}
|
||||
|
||||
public byte[] Compute()
|
||||
{
|
||||
byte[] array = new byte[GlobalSalt.Length + MasterPass.Length];
|
||||
Buffer.BlockCopy(GlobalSalt, 0, array, 0, GlobalSalt.Length);
|
||||
Buffer.BlockCopy(MasterPass, 0, array, GlobalSalt.Length, MasterPass.Length);
|
||||
byte[] password = new SHA1Managed().ComputeHash(array);
|
||||
byte[] array2 = new byte[2] { 4, 14 };
|
||||
byte[] array3 = new byte[array2.Length + PartIv.Length];
|
||||
Buffer.BlockCopy(array2, 0, array3, 0, array2.Length);
|
||||
Buffer.BlockCopy(PartIv, 0, array3, array2.Length, PartIv.Length);
|
||||
byte[] bytes = new PBKDF2(new HMACSHA256(), password, EntrySalt, 1).GetBytes(32);
|
||||
return new AesManaged
|
||||
{
|
||||
Mode = CipherMode.CBC,
|
||||
BlockSize = 128,
|
||||
KeySize = 256,
|
||||
Padding = PaddingMode.Zeros
|
||||
}.CreateDecryptor(bytes, array3).TransformFinalBlock(Ciphertext, 0, Ciphertext.Length);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user