我使用java SecureRandom創建salt來加密用戶。但是,當我嘗試將用戶與salt和密碼相匹配時,他們在不同的機器上失敗。用戶是在Linux測試機器上創建的,我將數據庫複製到我的OS X機器上。匹配成功的測試機上,但沒有在我的OS X.由Java SecureRandom創建的salt具有不同的getBytes()值
相同的鹽得到不同的字節用下面的代碼,甚至連長度都不同:
salt.getBytes()
這裏是鹽生成過程:
SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
String salt = new String(bytes);
user.setSalt(salt);
可能是getBytes()
可能在同一個鹽在不同的機器上有不同的值?
我看,所以,如果我不想改變salt數據類型,我可以給一個字符集,比如'utf-8'作爲第二個參數'新的字符串(字節,'utf-8')解決方法? –
@RyanZhu並非所有系列的字節都可以編碼成有效的UTF_8字符串,因此也不會起作用。你的salt不是一個字符串,所以沒有理由把它放在一個字符串中......試試這個例子:'byte [] b = {-128}; byte [] b2 = new String(b,UTF_8).getBytes(UTF_8); System.out.println(Arrays.toString(b2));' – assylias
另請參見我剛剛發佈的重複問題和此:http://stackoverflow.com/questions/16853957/convert-byte-salt-to-string-in -java – assylias