Uses rand.Read instead of implementing our own reader