add a more complicated random key generator