2014-11-04 15 views
6

के अनुसार बेस 64url मैं सी # में RFC4648 के अनुसार बेस 64url के लिए एक (तेज़) मानक कार्यान्वयन की तलाश में हूं।सी #: आरएफसी 4648

मैं HttpServerUtility.UrlTokenEncode पाया लेकिन यह इस तरह दिखता है RFC4648 का पालन नहीं करता (UrlTokenEncode अंत जो = संकेत है कि हटा दिया गया है की संख्या को इंगित करता है पर एक नंबर कहते हैं, here और here देखें)।

उदाहरण:

बेस 64 एन्कोडिंग:

Convert.ToBase64String (System.Text.Encoding.ASCII.GetBytes ('एए')); // रिटर्न "क्यू ="

base64url एन्कोडिंग:

HttpServerUtility.UrlTokenEncode (System.Text.Encoding.ASCII.GetBytes ('एए')); // रिटर्न "QUE1" लेकिन मैं "क्यू"

+0

सिर्फ "ऐसा लगता है" कहने के बजाय आप क्या कर सकते हैं इसके बारे में एक उदाहरण दे सकते हैं? –

+0

@ जोन्स स्केट: मुझे खेद है। मैं बस मेरी चिंताओं को जोड़ा ... – Dunken

+0

यह अभी भी काफी अस्पष्ट है। कृपया एक * कंक्रीट * उदाहरण दें: वास्तविक आउटपुट और अपेक्षित आउटपुट के साथ नमूना डेटा युक्त नमूना कोड। कृपया पढ़ें http://tinyurl.com/stack-hints –

उत्तर

7

टिप्पणियों के आधार पर उम्मीद करेंगे, यह लग रहा है जैसे HttpServerUtility.UrlTokenEncode गद्दी के लिए अतिरिक्त चरित्र के लिए को छोड़कर सही काम करता है। तो अगर आप ऐसा करने में सक्षम होना चाहिए:

string customBase64 = HttpServerUtility.UrlTokenEncode(data); 
string rfc4648 = customBase64.Substring(0, customBase64.Length - 1); 

लेकिन, आप इकाई परीक्षण कि यह वास्तव में आरएफसी 4648 वर्णमाला का उपयोग करता है की जाँच करने के लिए (और आरएफसी 4648 के रूप में एक ही तरीके से) जोड़ना चाहिए। यह कुछ हद तक आश्चर्यजनक है कि दस्तावेज़ बहुत अस्पष्ट हैं :(

+2

यदि आप टी चाहते हैं ओ डीकोड ('UrlTokenDecode') जॉन की 'rfc4648' आपको अतिरिक्त वर्ण फिर से जोड़ने की आवश्यकता है:' अगर (आरएफसी 4648. लम्बाई% 4! = 0) आरएफसी 4648 + = (4 - आरएफसी 4648. लम्बाई% 4);' – Dunken

+1

@ डंकन: मेरा मानना ​​है कि आपको इसे लंबाई के बावजूद जोड़ना चाहिए - लेकिन 4 के बजाय 0 के साथ, अगर यह अन्यथा होगा 4. –

+0

आप सही हैं! (हमेशा के रूप में ;-)) – Dunken

संबंधित मुद्दे