/* * 2017-10-21 * * in .NET Standard are no classes like: * * RNGCryptoServiceProvider * http://packagesearch.azurewebsites.net/?q=RNGCryptoServiceProvider * * SHA256Managed * http://packagesearch.azurewebsites.net/?q=SHA256Managed * * https://github.com/googlesamples/oauth-apps-for-windows * https://github.com/googlesamples/oauth-apps-for-windows/blob/master/OAuthConsoleApp/OAuthConsoleApp/Program.cs */ public string RandomDataBase64Url(uint length) { byte[] bytes = new byte[length]; // original code //RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); #if NETSTANDARD1_3 // from System.Security.Cryptography // designed to be used with cryptographic algorithms System.Security.Cryptography.RandomNumberGenerator rng = null; rng = System.Security.Cryptography.RandomNumberGenerator.Create(); rng.GetBytes(bytes); #else // insecure (albeit faster) Random class System.Random rng = new System.Random(); rng.NextBytes(bytes); #endif string base64url_no_padding = null; Base64UrlEncoding e = new Base64UrlEncoding(); base64url_no_padding = e.Encode(bytes, is_padded: false); return(base64url_no_padding); }
internal string Serialize() { var jsonSerializer = new DataContractJsonSerializer(typeof(HeaderDto)); using (var stream = new MemoryStream()) { jsonSerializer.WriteObject(stream, this); return(Base64UrlEncoding.Encode(stream.ToArray())); } }
public void Encode() { Base64UrlEncoding e = new Base64UrlEncoding(); i = "test"; o = e.Encode(i); Assert.Equal(o, "dGVzdA=="); i = "test0"; o = e.Encode(i); Assert.Equal(o, "dGVzdDA="); i = "test00"; o = e.Encode(i); Assert.Equal(o, "dGVzdDAw"); i = "test01"; o = e.Encode(i); Assert.Equal(o, "dGVzdDAx"); i = "test000"; o = e.Encode(i); Assert.Equal(o, "dGVzdDAwMA=="); o = e.Encode(new byte[] { 0, }); Assert.Equal(o, "AA=="); o = e.Encode(new byte[] { 0, }, is_padded: false /*, is_padded_optimized: true*/); Assert.Equal(o, "AA"); o = e.Encode(new byte[] { 0, }, is_padded: true, is_padded_optimized: true); Assert.Equal(o, "AA2"); o = e.Encode(new byte[] { 0, 0, }); Assert.Equal(o, "AAA="); o = e.Encode(new byte[] { 0, 0, }, is_padded: false /*, is_padded_optimized: true*/); Assert.Equal(o, "AAA"); o = e.Encode(new byte[] { 0, 0, }, is_padded: true, is_padded_optimized: true); Assert.Equal(o, "AAA1"); o = e.Encode(new byte[] { 0, 0, 0, }); Assert.Equal(o, "AAAA"); o = e.Encode(new byte[] { 0, 0, 0, }, is_padded: false /*, is_padded_optimized: true*/); Assert.Equal(o, "AAAA"); o = e.Encode(new byte[] { 0, 0, 0, }, is_padded: true, is_padded_optimized: true); Assert.Equal(o, "AAAA0"); i = "any carnal pleasure."; o = e.Encode(i); Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3VyZS4="); i = "any carnal pleasure"; o = e.Encode(i); Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3VyZQ=="); i = "any carnal pleasur"; o = e.Encode(i); Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3Vy"); i = "any carnal pleasu"; o = e.Encode(i); Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhc3U="); i = "any carnal pleas"; o = e.Encode(i); Assert.Equal(o, "YW55IGNhcm5hbCBwbGVhcw=="); i = "pleasure."; o = e.Encode(i); Assert.Equal(o, "cGxlYXN1cmUu"); i = "leasure."; o = e.Encode(i); Assert.Equal(o, "bGVhc3VyZS4="); i = "easure."; o = e.Encode(i); Assert.Equal(o, "ZWFzdXJlLg=="); i = "asure."; o = e.Encode(i); Assert.Equal(o, "YXN1cmUu"); i = "sure."; o = e.Encode(i); Assert.Equal(o, "c3VyZS4="); return; }
public void Encode(string input, string expectedOutput) { var base64url = Base64UrlEncoding.Encode(Encoding.UTF8.GetBytes(input)); Assert.Equal(expectedOutput, base64url); }