我有一個安全機制,實現對稱算法RijndaelManaged。我設法找到信息什麼是使用RijndaelManaged對於特定IV的加密數據的最大大小。根據我的計算,它將是128個字節。不過,我需要使用Base64將這128個字節轉換爲字符串。有沒有一種方法可以計算Base64編碼將用於編碼大小爲128的輸入字節數組的字符的最大數量?Base64編碼數據最大尺寸
此致的Pawel
我有一個安全機制,實現對稱算法RijndaelManaged。我設法找到信息什麼是使用RijndaelManaged對於特定IV的加密數據的最大大小。根據我的計算,它將是128個字節。不過,我需要使用Base64將這128個字節轉換爲字符串。有沒有一種方法可以計算Base64編碼將用於編碼大小爲128的輸入字節數組的字符的最大數量?Base64編碼數據最大尺寸
此致的Pawel
絕對 - Base64需要4個字符來表示每3個字節。 (填充用於不是3字節精確倍數的二進制數據。)因此,128個字節總是172個字符。 (解決這個問題的方法是base64在每個字符中代表6位(2 = 64);因此3個字節= 24位= 4個基本64個字符)。
基64編碼字符串將使用每3個字節(或其部分)有4個字符。所以128個字節將是172個基本64個字符。
我得到一個172字符長度的結果字符串,但是當我顯示string.getBytes()。length時,長度也是172.我只需要128字節。 –
@UsmanRana:這可以通過問一個新問題來回答。雖然你很可能沒有正確使用Base64編碼/解碼功能。我不確定在這種情況下'string.getBytes()'是什麼,因爲string沒有這樣的方法。如果你使用的是Encoding.GetBytes,那麼我希望它是相同的。你大概不會使用'Convert.FromBase64String',因爲輸出的長度不一樣。基本上你需要更多的信息,這是可以回答的,評論不是提供這個地方的地方。 – Chris
雖然一旦你問這個問題隨時鏈接到這裏,我會看看。 – Chris
如果您需要以編程方式檢查,您可以通過檢查模數來實現。下面是一些psudocode(無特定語言):
function base64Inflation (numBytes) minimumBase64Bytes = roundDown(numBytes/3 * 4) modulus = numberOfBytes % 3 // Assuming % is the modulo operator if modulus == 0 return minimumBase64Bytes // Exact fit! No padding required. else return minimumBase64Bytes + 4 // Doesn't quite fit. We need to pad.
我也實施了同樣的邏輯在golang:
在的Java:
byte[] bytes = new byte[128];
int base64Length = bytes.length/3 * 4; // Strictly integer division
if (bytes.length % 3 != 0)
{
base64Length += 4; // Extra padding characters will be added
}
System.out.println(bytes.length + " bytes will be encoded in " + base64Length + " characters.");
所以,凡輸入bytes.length == 128
,輸出將是base64Length == 172
個字符。
也參考此鏈接。 http://stackoverflow.com/questions/38632955/how-to-get-128-bytes-of-base64-encoded-string-of-172-characters –
@UsmanRana:請不要使用評論來嘗試提請注意其他問題。 –