using Isopoh.Cryptography.Argon2;
using System.Security.Cryptography;
public static string UriSafeBase64Encode(byte[] bytes)
return Convert.ToBase64String(bytes)
public static byte[] UriSafeBase64Decode(string data)
string[] pads = {"", "=", "==", "==="};
var pad = d.Length & 0x0003;
return Convert.FromBase64String(d);
public static void Main()
var salt = RandomNumberGenerator.GetBytes(32);
var encodedsalt = UriSafeBase64Encode(salt);
var passwordBytes = Encoding.UTF8.GetBytes(password);
var secret = Encoding.UTF8.GetBytes("secret");
var config = new Argon2Config
Type = Argon2Type.DataIndependentAddressing,
Version = Argon2Version.Nineteen,
Threads = Environment.ProcessorCount,
Password = passwordBytes,
var argon2A = new Argon2(config);
using(var hashA = argon2A.Hash())
hashString = config.EncodeString(hashA.Buffer);
Console.WriteLine(hashString);
if (Argon2.Verify(hashString, passwordBytes, 5))