Files
SuperVPN/output/Libraries/BouncyCastle.Crypto/crypto/Security.cs
2025-10-09 09:57:24 +09:00

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;
}
}