public static class SimpleToken
{
const string TOKENALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-.";
static string NewToken(int length = 16)
{
var rnd = new RNGCryptoServiceProvider();
var tokenBytes = new byte[length];
rnd.GetBytes(tokenBytes);
var token =
Enumerable
.Range(0, length)
.Select(i => TOKENALPHABET[tokenBytes[i] % TOKENALPHABET.Length])
.ToArray();
return new String(token);
}
}
I needed a quick and dirty(?) way to generate long urls for onetime use. It's a simple login-scheme where a user enters his e-mail and gets a one-time URL for logging in. The URL is discarded after one use.
I.e. http://example.com/tokenlogin/3cuzLkh8GcANjqnWcijEeJIHphHx6ZDwfj-2XTR4bfkkqmzmmFYAY2tWsZWST1.5
RNGCryptoServiceProviderimplementsIDisposable, so put it in ausingblock. \$\endgroup\$