Создайте n символов (~ n / 2 байта), случайную строку в шестнадцатеричном виде:
var randBytes = new byte[n/2 + n%2>0?1:0];
new Random().NextBytes(randBytes);
var hex = BitConverter.ToString(randBytes).Replace("-", string.Empty).Substring(0,n);
Рассматривали ли вы строки Base64? В зависимости от вашего приложения, они часто могут быть более полезными. Они гарантированно будут ASCII и обеспечат ~ 4/3 символа на входной байт. Чтобы создать n символьную строку:
var randBytes = new byte[(n/4 + n%4>0?1:0)*3];
new Random().NextBytes(randBytes);
var base64 = Convert.ToBase64String(randBytes).Substring(0,n);
Очевидно, что вы можете опустить .Substring (0, n), если ваше приложение не требует либо нечетного числа шестнадцатеричных символов, либо Base64, который не кратен 4 символам.
Не стесняйтесь расширять примеры, делая статическим Random (), как предлагали другие авторы.