Hoe om te kodeer in Base64 met Java
Base64 is `n metode vir die kodering, is elke 3 grepe 4 grepe insette van vertrek wat algemeen gebruik word om beelde of klank lêers te e-pos enkodeer (hoewel dae lêer oordrag na 7-bit is op die punt om einde) , en `n manier om weg te steek as jy inteken op `n webwerf (gebruikers en wagwoorde) van "Snooping". Hier is `n voorbeeld van hoe om `n Base64-encoder in Java te programmereer, `n programmeertaal vir verskeie platforms.
stappe
1
Voer inligting en lêernaam in
2
Begin jou gunsteling redakteur, soos "Notepad" of "vi", en voer die standaardkode in, asook die verklaring van klasse en konstantes. Noem die lêer as Base64.java.
3
Hierdie konstante waardes is spesifiek, soos vasgestel in die artikel, in die betrokke RFC (Oproep na afgeleë funksies vir sy akroniem in Engels). Dit is oor die algemeen `n goeie praktyk. Lees al die RFC`s voordat u `n kode begin.
openbare klas Base64 (private statiese einde String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "+ /"-privaat statiese finale int splitLinesAt = 76-
4
Om karakters as grepe te behandel, beteken dat die karakters "multibyte", soos die Japannese of Chinese, sal dit nie korrek geënkodeer word nie. Daarom moet ons die getBytes () van String-metode gebruik om die Unicode karakters te omskep in die grepe voordat ons begin kodering. As jy byvoorbeeld met `n Japannese dokument werk en dit in die Amerikaanse Engelse taalinstelling gekonfigureer is, moet jy die lokaal spesifiseer vir die uitset van getBytes (), asook getBytes ("UTF-8").
5
Ons sal ondersoek hoeveel stukkende bytes nodig is. Die Java-module-operateur,%, help baie in hierdie situasie. Ons gaan ook die subroutine naam en parameters verklaar terwyl ons hierin is.
6
Nou gebruik ons die waarde om die intreevlak te maak. Let daarop dat indien dit nie nodig is nie, hoef dit nie bygevoeg te word nie, aangesien ons die tweede keer die module 3 neem en `n 3 in `n 0 omskakel.
openbare statiese byte [] ZeroPad (int lengte, byte [] grepe) {byte [] = nuwe byte opgestopte [lengte] - // geïnisialiseer aan nul deur JVMSystem.arraycopy (grepe, 0, opgestopte, 0, bytes.length) - teruggevoerde-} publieke statiese stringkode (string string) {string geïnkripteer = ""-byte [] stringArray-probeer {stringArray = string.getBytes ("UTF-8") - // Gebruik gepaste enkodering string} catch (Uitsondering geïgnoreer) {stringArray = String.getBytes () - // gebruik verstek land eerder as gekwaak} int paddingCount = (3 - (stringArray.length% 3)!)% 3- stringArray = zeroPad (stringArray.length + paddingCount, stringArray) -
7
Nou as ons kom by wat ons betref: pak 3 grepe op `n keer in `n 24-bis-heelgetal, en trek 6-bis indekse in die snaarkode. Hierdie getalle is nie magies nie: 24 is 6 presies 4 keer gedeel en 6 bisse kan waardes van 0 tot 63 bevat wat enige waarde in die 64-byte-ketting kan indekseer.
vir (int i = 0- i < stringArray.length-i + = 3) {int j = ((stringArray [i] & 0xff) << 16) + ((stringArray [i + 1] & 0xff) << 8) + (stringArray [i + 2] & 0xff) -encoded = encoded + base64code.charAt ((j >> 18) & 0x3f) + base64code.charAt ((j >> 12) & 0x3f) + base64code.charAt ((j >> 6) & 0x3f) + base64code.charAt (j & 0x3f) -}
8
Ten slotte pak ons die uitset, nadat dit gedoen is, die CRLFs in die onderskeie 76 byte perke in, en gebruik `n aparte subroutine vir meer duidelikheid.
retour split lines (encoded.substring (0, encoded.length () - paddingCount) +"==".ubstring (0, paddingCount)) - openbare statiese String splitLines (string string) {String lines = ""-for (int i = 0- i < string.length () - i + = splitLinesAt) {lines + = string.substring (i, Math.min (string.length (), i + splitLinesAt)) - lines + = " r n r n"-} retourlyne-}
9
Ons kan, indien nodig, `n hoofroetine vir toetsdoeleindes byvoeg. Dit is gewoonlik `n goeie idee voordat u die kode vir openbare gebruik publiseer.
openbare statiese leegte hoof (String [] args) {for (int i = 0- i < args.length-i ++) {System.err.println ("kodering "" + args [i] + """) -Systeem.out.println (encode (args [i])) -}}
10
Hier is die voltooide module:
openbare klas Base64 (private statiese einde String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "+ /"-private splitLinesAt statiese finale int = 76-openbare statiese byte [] ZeroPad (int lengte, byte [] grepe) {byte [] = nuwe byte opgestopte [lengte] - // geïnisialiseer aan nul deur JVMSystem.arraycopy (grepe, 0, gevulde, 0, grepe.length) -return padded-} openbare statiese string enkodering (string string) {String encoded = ""-byte [] stringArray-probeer {stringArray = string.getBytes ("UTF-8") - Gepaste gebruik enkodering // string} catch (Uitsondering geïgnoreer) {stringArray = String.getBytes () - // gebruik verstek land eerder as gekwaak} // bepaal hoeveel bytes padding om by te voeg tot die outputint paddingCount = (3 - (stringArray.length% 3))% 3 - // voeg padding om enige nodige die inputstringArray = ZeroPad (stringArray.length + paddingCount, stringArray) - // proses 3 grepe op `n tyd, drukking uit vier uitset grepe // bekommer oor CRLF invoegings laterfor (int i = 0- i < stringArray.length-i + = 3) {int j = ((stringArray [i] & 0xff) << 16) + ((stringArray [i + 1] & 0xff) << 8) + (stringArray [i + 2] & 0xff) -encoded = encoded + base64code.charAt ((j >> 18) & 0x3f) + base64code.charAt ((j >> 12) & 0x3f) + base64code.charAt ((j >> 6) & 0x3f) + base64code.charAt (j & 0x3f) -} // vervang gecodeerde padding nulls met "="retour split lines (encoded.substring (0, encoded.length () -paddingCount) + "==".ubstring (0, paddingCount)) - openbare statiese String splitLines (string string) {String lines = ""-for (int i = 0- i < string.length () - i + = splitLinesAt) {lines + = string.substring (i, Math.min (string.length (), i + splitLinesAt)) - lines + = " r n r n"-} retourlyne-} publieke statiese leegte hoof (String [] args) {for (int i = 0- i < args.length-i ++) {System.err.println ("kodering "" + args [i] + """) -Systeem.uit.println (encode (args [i])) -}}}
11
Kom ons stel dit nou saam met javac, gcj, jikes, of like- en probeer, met behulp van die Wikipedia-artikel Hobbes:
$ gcj -C Base64.java $ java Base64 "Die mens is onderskei, nie net deur Sy rede, maar deur thissingular passie van ander diere, wat `n lus van die gemoed, sodat deur aperseverance van vreugde in die voortgesit en onvermoeide generasie ofknowledge, oorskry die kort heftigheid van enige vleeslike plesier."
12
Hier is die resultaat:
encoding "Die mens is onderskei, nie net deur Sy rede, maar deur esta singularpassion van ander diere, wat `n lus van die gemoed, sodat deur aperseverance van vreugde in die voortgesette en onvermoeide generasie ofknowledge, oorskry die kort heftigheid van enige vleeslike plesier."TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
13
Pas presies! Dit beteken dat die twee programme verkeerd is, of albei is min of meer goed. Op hierdie punt kan jy die Wikipedia-artikel weer besoek, en lees die RFC skakels om te sien of ons iets mis.
wenke
- Moenie voel dat jy altyd iets moet verstaan voordat jy dit kodereer nie. Dinge word duideliker soos wat jy vorder.
- Terwyl die lees van die betrokke RFC`s nodig is vir die opstel van kode, kan die inligtingoorlading oorweldigend wees. Soms is die beste manier om die kode ongedaan te maak aan wat jy verstaan, en dan terug te gaan om die funksionaliteit van punt tot punt te verifieer. die verpligte vereistes van die RFC`s.
- Java is fyn as `n algemene doeltaal, en vir toestelle soos selfone is dit dalk die enigste opsie vir programmeerders - maar jаvascript of Python-sintaks kan dalk meer bondig en kragtig lyk. Al die verskillende tale het hul eie swakhede en sterk punte.
- Probeer die komplementêre kode van die metode vir hierdie module skryf!
Deel op sosiale netwerke:
Verwante
- Hoe om persentasie in Java te bereken
- Hoe om `n Java-venster in Swing te sluit
- Hoe om karakterkoorde in Java te vergelyk
- Hoe om jou eerste Java-program in Ubuntu Linux te skep
- Hoe om `n Java-applet te skep
- Hoe om `n nuwe Java-projek in Eclipse te skep
- Hoe om Java uit te skakel
- Hoe om `n jar java-lêer uit te voer
- Hoe om die som van twee getalle in Java te vind
- Hoe om jou eerste Java-program te skryf
- Hoe om `n Java-program te skryf met twee klasse met behulp van Eclipse
- Hoe om `n program in Java te skryf om die gemiddelde te bereken
- Hoe om `n klip-, papier- en skêrspel in Java te maak
- Hoe om `n skikking in Java te druk
- Hoe om Java op Windows 8 te installeer
- Hoe om die Java Development Kit (JDK) op `n Mac te installeer
- Hoe om Java-speletjies te installeer
- Hoe om `n metode in Java te bel
- Hoe om die lengte van `n tou in Java te kry
- Hoe om `n Java-ontwikkelaar op die hoogste vlak te word
- Hoe om `n virus te skep