Does Java SecureRandom.nextLong() return all possible values given it inherits from Random which uses only 48 bits? If not, can I still do it in Java maybe by modifying the Random class and how to do it? I just want to use an all random long number generator where all possible long values can be returned, if possible.
            Asked
            
        
        
            Active
            
        
            Viewed 1,207 times
        
    3
            
            
         
    
    
        The Impaler
        
- 45,731
- 9
- 39
- 76
 
    
    
        mj1261829
        
- 1,200
- 3
- 26
- 53
- 
                    I'm a little confused by the question's wording. I'm guessing you don't want to generate all possible Long values. I'm guessing that you want a random number from the set of all possible Long values? – Software Engineer Aug 05 '18 at 17:46
- 
                    If you truly want a random number (not based on discrete mathematics) you should visit some online sites. For example: [random.org](https://www.random.org/) – zlakad Aug 05 '18 at 17:47
- 
                    2@zlakad unless you want it cryptographically secure in which case you definitely *don't* want to get random data from another source. – Peter Lawrey Aug 05 '18 at 17:55
- 
                    @PeterLawrey, yes, I see what you mean. I wrote an algorithm in assembler for Z80 processor for generations of random bites back in 1982-3. God, I forgot everything about it! – zlakad Aug 05 '18 at 17:58
- 
                    Yes, from the set of all possible long values and not necessary all long values. – mj1261829 Aug 05 '18 at 18:01
- 
                    @zlakad web sites could record your random numbers or be hacked to record them. Why would any on bother? When you have a private keys worth ~$1 bn https://etherscan.io/accounts recording sources of random data becomes interesting to some. – Peter Lawrey Aug 05 '18 at 18:01
- 
                    @PeterLawrey Agreed! – zlakad Aug 05 '18 at 18:05
1 Answers
7
            While SecureRandom inherits from Random, it doesn't use the same maths or have the same limitation. It will produce all possible 64-bit values eventually.
This class provides a cryptographically strong random number generator (RNG).
This class delegates to one of many possible implementations. You can select one by calling SecureRandom.getInstance(algorithm)
Note: some implementations use entropy in your computer to make the results random, rather than purely pseudo random.
this uses s 48 bit algorighm
SecureRandom doesn't use any of the methods of it's parent e.g.
/**
 * The provider implementation.
 */
private SecureRandomSpi secureRandomSpi = null;
public void nextBytes(byte[] bytes) {
    secureRandomSpi.engineNextBytes(bytes);
}
This method delegates to a completely different implementation.
Related link How to solve slow Java `SecureRandom`? due to using /dev/random
 
    
    
        Boris the Spider
        
- 59,842
- 6
- 106
- 166
 
    
    
        Peter Lawrey
        
- 525,659
- 79
- 751
- 1,130
- 
                    
- 
                    1
- 
                    1@EngineerDollery Unfortunately, `Random` is not an interface but is widely used, so the designers decided to extend Random, but replace it with a completely different implementation, but since it extends Random it can be used as a drop in replacement. – Peter Lawrey Aug 05 '18 at 17:53
- 
                    2Ok, downvote removed. I should be more weary of disagreeing with you ;) – Software Engineer Aug 05 '18 at 18:12