2012-07-25 253 views
1

在Python中是否有任何RFC4648(「Base16,Base32和Base64數據編碼」)的實現? 請注意,我特別尋找RFC 4648,而不是它的前身。其他腳本語言可能會工作,只要不需要太長時間。 Python是首選。RFC 4648(Base64)在Python中的實現

+0

這個問題太寬泛了(一個問題兩個)。我刪除了matlab標籤,因爲這裏已經有兩個Python的答案。請打開一個關於Matlab實現的新問題。 – kay 2012-07-25 22:17:47

+0

不公平:(Python在這裏有更多的觀衆,因此更多的答案。爲什麼不讓OP決定刪除哪個標籤。我認真:) – Amro 2012-07-25 22:17:52

+0

@Amro for you:http://stackoverflow.com/questions/11659710/rfc-4648-base16-32-64-implementation-in-matlab :) – kay 2012-07-25 22:36:36

回答

3

Python有一個base64模塊,它實現了RFC 3548(RFC 4648的舊版本)。

+0

在8位二進制數的情況下,最後的6位數組總是零。因此它被跳過了,但我在RFC的任何地方都找不到。你知道在哪裏嗎? – Bob 2012-07-25 22:20:22

+0

對不起,我不太清楚你的意思。你能舉一個具體的例子嗎?例如, – 2012-07-25 22:26:41

+0

,二進制102 = 01100110。遵循這些規則,你應該把它分成三組填充,即011001 100000 000000.但000000不編碼,最終結果是Zg == – Bob 2012-07-25 23:45:22

0

有BASE64的字符串操作數版,以及:

a_str = 'This is a string' 
a_str.encode('base64', 'strict') 
'VGhpcyBpcyBhIHN0cmluZw==\n' 

它確實一樣base64.b64encode但我想我會在那裏把它作爲一個選項。

補丁:

什麼你要找的是「擴展的十六進制」對,我記得我安裝了DNSSEC項目而回常規的base64模塊:http://bugs.python.org/issue16995

0

雖然與https://golang.org/src/encoding/base32/base32.go

工作,我是不是能找到什麼RFC 4648的Python實現是指爲「使用擴展的十六進制字母編碼的基址32「;所以我寫了一個爲Python:

https://gist.github.com/graham/d7845f00fce0690b65ab049d52c1ddcb

至於我可以告訴RFC 3548沒有什麼不同,如果你使用標準的字符映射表,但我沒能找到使用的標準方式擴展十六進制字母

隨意複製粘貼,我會寫一些測試,並創建一個git回購,如果人們認爲這是一個合理的解決方案。