2017-02-15 19 views
0

我需要將byte[]有效存儲到JWT claim值中,具體爲在JWT的有效負載私有索賠值中有效存儲二進制數據

有什麼比將byte[]轉換爲base64URL更高效嗎? 即

Microsoft.AspNetCore.WebUtilities.Base64UrlTextEncoder.Encode(arrToEnc); 

最終目標是(正常JWT解碼後)來編碼一個List<UInt16>使得每個UInt16是至多2個字節。

考慮到byte[] - > UTF8字符串。即System.Text.Encoding.UTF8.GetString(arrToEnc);

這是怎麼智威湯遜在一般使用的Base64編碼它們完全分開......

謝謝..

+0

應用於你能壓縮base64編碼之前壓縮的內容? Base64增加了33%的開銷。可能的壓縮比較大 – pedrofb

+0

另一種方法是base85,但它只比base64提高了7℅,不常見,實現不能支持它。請參閱http://stackoverflow.com/questions/1443158/binary-data-in-json-string-something-better-than-base64我建議壓縮 – pedrofb

+0

我可以並將使用gzip。我將編寫的編碼器和解碼器非常罕見。我認爲解決方案最終取決於索賠價值中'字符串'的字符集。我編碼到那個基地。 – ttugates

回答

1

的Base64增加33℅的開銷,但可能是較小的,取決於內容。另一個選擇是base85,但它只比base64提高了7℅,不常見,實現不能支持它。如果您控制編碼器和解碼器,這不是問題。 請參閱Binary Data in JSON String. Something better than Base64

您可以壓縮內容。 Base64最糟糕的情況是33℅,壓縮比可以壓縮到30-40℅左右,但是JWT在壓縮時會做額外的base64編碼,所以即使使用base85,你的壓縮比也會過大1:1

您還可以添加gzip來您的服務器,然後壓縮率將在整個JWT內容