我需要生成隨機 32個字符的字符串與使用SecureRandom
類。我試圖與產生32字節數組然後使用Base64編碼:在我的情況下生成隨機字符
byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes));
但這代碼產生具有超過32個字符的字符串。如何在使用SecureRandom
類的同時獲得32個隨機字符?
我需要生成隨機 32個字符的字符串與使用SecureRandom
類。我試圖與產生32字節數組然後使用Base64編碼:在我的情況下生成隨機字符
byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes));
但這代碼產生具有超過32個字符的字符串。如何在使用SecureRandom
類的同時獲得32個隨機字符?
嘗試編碼22到24字節。
編碼此數量時,生成的Base64編碼的字符串應該包含完全32個字符,儘管其中一些可能是=
標記,這取決於是否由於填充引起的22或23個字節。
如果您不想要=
標記,只需編碼24個字節,並且不會添加填充。
如果您對填充或Base64編碼的工作方式更感興趣,那麼當前的wikipedia article是非常詳細的。
例如相應地更改您的代碼:
byte[] bytes = new byte[24];
new SecureRandom().nextBytes(bytes);
new String(Base64.encodeBase64(bytes)); // Should be 32 characters in length.
Base64附加N個字符的規則是什麼?你怎麼知道24字節編碼結果32個字符? – user842225
Base64使用64 = 2^6「數字」 - 因此每字節/字符有6位有效載荷。 4個字符完全可以滿足3個字節。因此,32個字符的Base64將具有完全24字節的有效載荷。 –
我們可以使用單行代碼實現此目的。使用org.apache.commons.lang.RandomStringUtils
從commons-lang庫。
代碼:
RandomStringUtils.randomAlphabetic(32);
您需要的32和代碼生成大於32,你爲什麼不能拿起前32?它仍然是隨機的... – alainlompo