55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
using System.Text;
|
|
using Org.BouncyCastle.Crypto;
|
|
using Org.BouncyCastle.Crypto.Digests;
|
|
using Org.BouncyCastle.Crypto.Engines;
|
|
using Org.BouncyCastle.Crypto.Generators;
|
|
using Org.BouncyCastle.Crypto.Modes;
|
|
using Org.BouncyCastle.Crypto.Paddings;
|
|
using Org.BouncyCastle.Crypto.Parameters;
|
|
using Org.BouncyCastle.Security;
|
|
using Org.BouncyCastle.Utilities.Encoders;
|
|
|
|
namespace crypto;
|
|
|
|
public class Security
|
|
{
|
|
public static string ComputeHash(string text, string salt)
|
|
{
|
|
byte[] bytes = Encoding.UTF8.GetBytes(text);
|
|
Sha512Digest sha512Digest = new Sha512Digest();
|
|
Pkcs5S2ParametersGenerator pkcs5S2ParametersGenerator = new Pkcs5S2ParametersGenerator(sha512Digest);
|
|
pkcs5S2ParametersGenerator.Init(bytes, Base64.Decode(salt), 2048);
|
|
return Base64.ToBase64String(((KeyParameter)pkcs5S2ParametersGenerator.GenerateDerivedParameters(sha512Digest.GetDigestSize() * 8)).GetKey());
|
|
}
|
|
|
|
public static string Decrypt(string cipherText, string key, string iv)
|
|
{
|
|
IBufferedCipher bufferedCipher = CreateCipher(isEncryption: false, key, iv);
|
|
byte[] array = bufferedCipher.DoFinal(Base64.Decode(cipherText));
|
|
return Encoding.UTF8.GetString(array, 0, array.Length);
|
|
}
|
|
|
|
public static string Encrypt(string plainText, string key, string iv)
|
|
{
|
|
IBufferedCipher bufferedCipher = CreateCipher(isEncryption: true, key, iv);
|
|
return Base64.ToBase64String(bufferedCipher.DoFinal(Encoding.UTF8.GetBytes(plainText)));
|
|
}
|
|
|
|
public static string GenerateText(int size)
|
|
{
|
|
byte[] array = new byte[size];
|
|
SecureRandom instance = SecureRandom.GetInstance("SHA256PRNG", autoSeed: true);
|
|
instance.NextBytes(array);
|
|
return Base64.ToBase64String(array);
|
|
}
|
|
|
|
private static IBufferedCipher CreateCipher(bool isEncryption, string key, string iv)
|
|
{
|
|
IBufferedCipher bufferedCipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new RijndaelEngine()), new ISO10126d2Padding());
|
|
KeyParameter keyParameter = new KeyParameter(Base64.Decode(key));
|
|
ICipherParameters parameters = ((iv == null || iv.Length < 1) ? ((ICipherParameters)keyParameter) : ((ICipherParameters)new ParametersWithIV(keyParameter, Base64.Decode(iv))));
|
|
bufferedCipher.Init(isEncryption, parameters);
|
|
return bufferedCipher;
|
|
}
|
|
}
|