public static void Main()
var guid1 = Guid.Parse("c904ffc2-3824-44b8-a8f4-5c7870613c6f");
var guid2 = Guid.Parse("2d3b72f9-fad0-439d-a4a5-25cde11eca84");
var encryptor = new Base58Encryptor();
encryptor.TryEncodeGuids(guid1, guid1, out string base58Output);
Console.WriteLine(base58Output);
internal sealed class Base58Encryptor
public bool TryEncodeGuids(Guid gatewayId, Guid orderId, out string base58Output)
Span<byte> data = stackalloc byte[32];
gatewayId.TryWriteBytes(data);
orderId.TryWriteBytes(data[16..]);
int safeCount = Base58.Bitcoin.GetSafeCharCountForEncoding(data);
Span<char> base58Encoded = stackalloc char[safeCount];
bool encodeSucceed = Base58.Bitcoin.TryEncode(data, base58Encoded, out int numCharsWritten);
base58Output = base58Encoded[..numCharsWritten].ToString();
public bool TryDecodeGuids(ReadOnlySpan<char> input, out Guid gatewayId, out Guid orderId)
int safeCount = Base58.Bitcoin.GetSafeByteCountForDecoding(input);
Span<byte> base58Decoded = stackalloc byte[safeCount];
bool decodeSucceed = Base58.Bitcoin.TryDecode(input, base58Decoded, out _);
gatewayId = new Guid(base58Decoded[..16]);
orderId = new Guid(base58Decoded[16..32]);
catch (ArgumentException)