Cum se codifică în Base64 cu Java

Base64 este o metodă de codificare, fiecare intrare 3 octeți 4 octeți de plecare este frecvent utilizat pentru a codifica imagini sau fișiere audio la e-mail (deși transmisie zile fișier la 7 biți sunt pe cale să se încheie) , și o modalitate de a vă ascunde în timp ce vă conectați la un site web (utilizatori și parole) din "IGMP". Iată un exemplu de programare a unui encoder Base64 în Java, un limbaj de programare pentru mai multe platforme.

conținut

pași

Imagine intitulată Encode a String to Base64 cu Java Pasul 1
1
Introduceți informațiile și numele fișierului
  • Imagine intitulată Encode a String to Base64 cu Java Pasul 2
    2
    Porniți editorul preferat, cum ar fi "Notepad" sau "vi", și introduceți codul implicit, ca și declarația de clase și constante. Denumiți fișierul ca Base64.java.
  • 3
    Aceste valori constante sunt specifice, după cum se stabilește în articol, în RFC-ul relevant (Apel la funcții la distanță pentru acronimul său în limba engleză). În general, este o practică bună. Citiți toate RFC înainte de a începe un cod.
    clasa publică Base64 {private static end String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "+ /"-private static final int splitLinesAt = 76-
  • 4
    Tratarea caracterelor ca octeți înseamnă că personajele "multibyte", precum japonezii sau chinezii, nu vor fi codificați corect. Prin urmare, trebuie să folosim metoda getBytes () de String pentru a converti caracterele Unicode în octeți înainte de a începe codarea. Dar, de exemplu, dacă lucrați cu un document japonez și este setat la american Rumano locale, va trebui să specificați localizare pentru getBytes de ieșire () și getBytes ("UTF-8").
  • 5
    Vom investiga cât de mulți octeți sunt necesari. Operatorul de module Java,%, ajută foarte mult în această situație. De asemenea, vom declara numele și parametrii subrutinei în timp ce suntem în acest domeniu.
  • 6
    Acum folosim această valoare pentru a face tamponul de intrare nul. Rețineți că în cazul în care nu este necesară umplerea, nu este necesar să se adauge, deoarece noi luăm modulul 3 pentru a doua oară, transformând un 3 într-un 0.
    byte public static [] ZeroPad (lungime int, byte [] bytes) {byte [] = new byte capitonat [lungime] - // inițializat la zero prin JVMSystem.arraycopy (bytes, 0, capitonată, 0, bytes.length) - return padded-} public static Codificare șir (șir de caractere) {String encoded = ""-byte [] șirArray-încercați {stringArray = string.getBytes ("UTF-8") - // folosesc string codare corespunzătoare} catch (Exception ignorată) {stringArray = String.getBytes () - // utilizare localizare implicită, mai degrabă decât croncănitură} int paddingCount = (3 - (stringArray.length% 3)!)% 3- stringArray = zeroPad (stringArray.length + paddingCount, stringArray) -
  • Imaginea intitulată Encode a String to Base64 cu Java Pasul 3
    7
    Acum, dacă ajungem la ceea ce ne privește: împachetați câte 3 octeți la un număr întreg de 24 de biți, apoi extrageți indici de 6 biți în codul de șir. Aceste numere nu sunt magice: 24 este împărțit între 6 exact de 4 ori, iar 6 biți pot conține valori de la 0 la 63, care poate fi indexat la orice valoare în lanțul de 64 octeți.


    pentru (int i = 0- i < stringArray.length- i + = 3) {int j = ((stringArray [i] & 0xFF) << 16) + ((șirArray [i + 1] & 0xFF) << 8) + (stringArray [i + 2] & 0xff) -codificat = codificat + base64code.charAt ((j >> 18) & 0x3f) + base64code.charAt ((j >> 12) & 0x3f) + base64code.charAt ((j >> 6) & 0x3f) + base64code.charAt (j & 0x3f) -}
  • 8
    În cele din urmă, am ambalat după el, introducerea CRLFs în limitele respective de 76 octet, folosind o subrutină separat pentru claritate.
    retur splitLines (coded.substring (0, encoded.length () - paddingCount) +"==".substring (0, paddingCount)) -} statice publice String splitLines (șir de șir) {String lines = ""-for (int i = 0- i < string.length () - i + = splitLinesAt) + = String.substring {linii (i, Math.min (string.length (), i + splitLinesAt)) - linii + = " r n r n"-} linii de întoarcere-}
  • 9
    Putem adăuga o rutină principală în scopuri de testare. Aceasta este de obicei o idee bună înainte de a vă publica codul pentru consumul public.
    public static void principal (String [] args) {pentru (int i = 0- i < args.length- i ++) {System.err.println ("codarea "" + args [i] + """) -System.out.println (codare (args [i])) -}}
  • 10
    Aici este modulul finalizat:

    clasa publică Base64 {private static end String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "+ /"int splitLinesAt finală privată static = 76-byte publice static [] ZeroPad (lungime int, byte [] bytes) {byte [] = new byte capitonat [lungime] - // inițializat la zero prin JVMSystem.arraycopy (octeți, 0, padded, 0, bytes.length) - retur plinat-} codificare statică publică a șirului (string string) {String encoded = ""-byte [] șirArray-încercați {stringArray = string.getBytes ("UTF-8") - Utilizare adecvata Codificare // string} catch (Exception ignorat) {stringArray = String.getBytes () - // utilizare default locale, mai degrabă decât croncănitură} // determina câte bytes umplutură pentru a adăuga la paddingCount outputint = (3 - (stringArray.length% 3))% 3 - // adăuga umplutură la orice necesara inputstringArray = ZeroPad (stringArray.length + paddingCount, stringArray) - // proces 3 octeți la un moment dat, churning patru octeți de ieșire // griji Despre Inserțiile CRLF laterfor (int i = 0- i < stringArray.length- i + = 3) {int j = ((stringArray [i] & 0xFF) << 16) + ((șirArray [i + 1] & 0xFF) << 8) + (stringArray [i + 2] & 0xff) -codificat = codificat + base64code.charAt ((j >> 18) & 0x3f) + base64code.charAt ((j >> 12) & 0x3f) + base64code.charAt ((j >> 6) & 0x3f) + base64code.charAt (j & 0x3f) -} // înlocuiți nodurile codificate cu nulls cu "="retur splitLines (coded.substring (0, encoded.length () -paddingCount) + "==".substring (0, paddingCount)) -} statice publice String splitLines (șir de șir) {String lines = ""-for (int i = 0- i < string.length () - i + = splitLinesAt) + = String.substring {linii (i, Math.min (string.length (), i + splitLinesAt)) - linii + = " r n r n"-} liniile returului-} static public void principal (String [] args) {pentru (int i = 0- i < args.length- i ++) {System.err.println ("codarea "" + args [i] + """) -System.out.println (codare (args [i])) -}}}
  • 11
    Acum să o compilați, folosind javac, gcj, jikes, sau ca și-și încercați, folosind articolul Hobbes Wikipedia:
    $ gcj -C Base64.java $ java Base64 "Omul se distinge, nu numai din cauza Lui, ci prin thissingular pasiune de la alte animale, care este o pofta de minte, că prin aperseverance încântării în ofknowledge a continuat și neobosită generație, Depășește vehemența scurt de orice plăcere carnale."
  • 12
    Iată rezultatul:

    codare "Omul se distinge, nu numai din cauza Lui, ci prin singularpassion esta de la alte animale, care este o pofta de minte, că prin aperseverance încântării în ofknowledge continuă și neobosită generație, Depășește vehemența scurt de orice plăcere carnale."TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
  • 13
    Se potrivește exact! Asta înseamnă că cele două programe sunt greșite, sau ambele sunt mai mult sau mai puțin bine. În acest moment, poate doriți să vizitați din nou articolul din Wikipedia și citiți linkurile RFC pentru a vedea dacă ne lipsește ceva.
  • sfaturi

    • Nu simțiți că întotdeauna trebuie să înțelegeți ceva înainte de al codifica. Lucrurile devin mai clare pe măsură ce progresați.
    • În timp ce citiți RFC relevant este necesar pentru producerea de cod, excesul de informații poate fi o majoritate covârșitoare, uneori, cel mai bun mod este de a sparge codul ce vrei să spui, și apoi indicați înapoi pentru a verifica numărul de punctul de funcționalitate cerințele obligatorii ale RFC.
    • Java este bine ca un limbaj de uz general, și pentru dispozitive, cum ar fi telefoanele mobile pot fi singura opțiune pentru programadores-, dar sintaxa jаvascript sau Python poate părea mai concis și puternic. Toate limbile diferite au propriile lor slăbiciuni și puncte forte.
    • Încercați să scrieți codul complementar al metodei pentru acest modul!
    Distribuiți pe rețelele sociale:

    înrudit
    Cum se codifică un joc videoCum se codifică un joc video
    Cum se compilează și se rulează un program Java folosind "Simbolul sistem"Cum se compilează și se rulează un program Java folosind "Simbolul sistem"
    Cum se configurează calea dvs. Java_Home în UbuntuCum se configurează calea dvs. Java_Home în Ubuntu
    Cum se creează fișiere JARCum se creează fișiere JAR
    Cum se creează primul program Java în Ubuntu LinuxCum se creează primul program Java în Ubuntu Linux
    Cum se creează un applet JavaCum se creează un applet Java
    Cum se creează un nou proiect Java în EclipseCum se creează un nou proiect Java în Eclipse
    Cum să dezactivați JavaCum să dezactivați Java
    Cum se descarcă Eclipse IDE în sistemul de operare WindowsCum se descarcă Eclipse IDE în sistemul de operare Windows
    Cum se descarcă Java în Internet ExplorerCum se descarcă Java în Internet Explorer
    » » Cum se codifică în Base64 cu Java

    © 2011—2020 ertare.com