Muestreo sin sesgo de módulo
Los enfoques ingenuos usan `random32 % charsetSize`; cuando charsetSize no divide 2³² exactamente, esto introduce un sesgo. Este generador usa muestreo por rechazo contra el mayor múltiplo de charsetSize que cabe en uint32 — los valores descartados disparan un nuevo sorteo — de modo que la distribución es exactamente uniforme.