public string GetJA3FingerprintFull() { /** * https://engineering.salesforce.com/open-sourcing-ja3-92c9e53c3c41 * The field order is as follows: * SSLVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats * * Example: * 769,47�𤂿0�161�162�171�172����0��,23��,0 **/ var v = this.supportedSslVersions.First(); ushort version = (ushort)((v.Item1 << 8) + v.Item2); StringBuilder sb = new StringBuilder(); sb.Append(version.ToString()); sb.Append(","); sb.Append(String.Join <ushort>("-", this.CipherSuites.Where(cs => !GREASE_SET.Contains(cs)))); sb.Append(","); sb.Append(String.Join <ushort>("-", this.ExtensionTypes.Where(et => !GREASE_SET.Contains(et)))); sb.Append(","); sb.Append(String.Join <ushort>("-", this.SupportedEllipticCurveGroups.Where(ecg => !GREASE_SET.Contains(ecg)))); sb.Append(","); sb.Append(String.Join <byte>("-", this.SupportedEllipticCurvePointFormats)); return(sb.ToString()); }
public string GetJA3SFingerprintFull() { /** * Version, Accepted Cipher, and List of Extensions. * It then concatenates those values together in order, using a �,� to delimit each field and a �-� to delimit each value in each field. * The field order is as follows: * TLSVersion,Cipher,Extensions * Example: * 769,47,65281𢠣1�𤂿6 **/ var v = this.supportedSslVersions.First(); ushort version = (ushort)((v.Item1 << 8) + v.Item2); StringBuilder sb = new StringBuilder(); sb.Append(version.ToString()); sb.Append(","); sb.Append(String.Join <ushort>("-", this.CipherSuites.Where(cs => !GREASE_SET.Contains(cs)))); sb.Append(","); sb.Append(String.Join <ushort>("-", this.ExtensionTypes.Where(et => !GREASE_SET.Contains(et)))); return(sb.ToString()); }