itholoinfo.com.com

Cum de a codifica un string la Base64 cu Java

Base64 este o metodă de codare care codifică fiecare 3 octeți de intrare în 4 octeți de ieșire - este de obicei folosit pentru a codifica fotografii sau audio pentru trimiterea prin e-mail (deși zilele de transmisie pe 7 biți sunt aproape goale ) și o modalitate de a ascunde autentificarea paginilor (nume de utilizator și parole) de la eavesdroppers. Iată un exemplu care arată cum să programați un encoder Base64 în Java, un limbaj de programare inter-platformă. Acest exemplu și șirul de codificare de testare au fost luate din acest Articol Wikipedia

conținut

.

pași

Imagine intitulată Encode a String to Base64 cu Java Pasul 1
1
Creați și denumiți fișierul.
  • Imagine intitulată Encode a String to Base64 cu Java Pasul 2
    2
    Deschideți editorul, cum ar fi Notepad sau vi, și introduceți codul preliminar, cum ar fi declarația de clasă și constantele cunoscute. Apelați fișierul Base64.java.
  • 3
    Aceste valori constante sunt specificate, așa cum este indicat în articol, în RFC-urile relevante. Este de obicei o idee bună să citiți toate RFC-urile relevante înainte de a începe codarea.
    public class Base64 {privat statică finală String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "+ /" - privat statică finală int = splitLinesAt 76-
  • 4
    Tratarea caracterelor ca octeți înseamnă că caracterele cu octeți multiple, cum ar fi japonezii sau chinezii, nu vor fi codificați cu greu. Prin urmare, trebuie să folosim metoda String getBytes () pentru a putea converti caracterele Unicode din locația curentă în octeți înainte de începerea codării. Dar, de exemplu, dacă lucrați la un document japonez într-o locație englezo-americană, va trebui să specificați locația rezultatului getBytes (), cum ar fi getBytes ("UTF-8").
  • 5
    Să aflăm câți octeți sunt necesari. Operatorul de module Java,%, este util aici. De asemenea, vom declara numele și parametrii subrutinei, deoarece suntem aici.
  • 6
    Acum folosim acea valoare pentru a umple intrarea nulă. Rețineți că, dacă nu este necesară nicio umplere, nu se va adăuga nicio plăcuță, deoarece am luat modulul 3 oa 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 de către JVM System.arraycopy (bytes, 0, matlasate, 0, bytes.length) - returnează encode padded-} public static string (string string) string codificat = { "" - byte [] = stringArray- try {stringArray String.getBytes ( "UTF-8") - // folosesc șirul de cod corespunzător! } Catch (Excepție ignorată) = {stringArray String.getBytes () - // utiliza locația implicită în schimb paddingCount} = int (3 - (3 stringArray.length%))% 3 = stringArray zeroPad (+ stringArray.length paddingCount, stringArray) -
  • Imagine intitulată Encode a String to Base64 cu Java Pasul 3
    7
    Acum că am ajuns la umplere: comprimați trei octeți în același timp într-un număr întreg de 24 biți, apoi extrageți indicele pe 6 biți în șirul de codificare. Aceste numere nu sunt magice: 24 este împărțit de 6 exact de 4 ori, iar 6 biți pot stoca valori de la 0 la 63, care pot fi indexate la orice valoare într-un șir codificat în baza 64.


    pentru (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
    În cele din urmă, vom pachet rezultatul după completarea lui prin introducerea noilor linii în limitele necesare de 76 octeți, folosind o subrutină separată pentru ao face mai clară.
    splitLines reveni (encoded.substring (0, encoded.length () - paddingCount) + "==" substring (0, paddingCount).) - splitLines} public String static (String String) Linii String = { "" -pentru (int i = 0- i < string.length()- i += splitLinesAt) {lines += string.substring(i, Math.min(string.length(), i +splitLinesAt))-lines += "rn"-}return lines-}
  • 9
    Putem, dacă vrem, să adăugăm o rutină principală de testare. Aceasta este de obicei o idee bună înainte de a posta codul pentru consumul public.
    public static void principal (String [] args) {pentru (int i = 0- i < args.length- i++) {System.err.println("codificando "" + args[i] + """)-System.out.println(encode(args[i]))-}}
  • 10
    Iată modul completat:

    public class Base64 {privat static finală String base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /" - int finală private static splitLinesAt = 76 public-byte 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 codificării padded-} string (string string) public static string {encoded = "" -byte [] stringArray-try {stringArray String.getBytes = ( "UTF-8") - // folosesc șirul de criptare corespunzătoare} catch (Exception ignorat) = {stringArray String.getBytes () - // utilizați locația implicită în schimb} // determina cât de multe bytes de umplutură va adăuga la resultadoint paddingCount = (3 - (stringArray.length% 3))% 3 - // adauga umplutura necesar entradastringArray = zeroPad (stringArray.length + paddingCount, stringArray) - proces // 3 octeți la un moment dat, crearea // 4-byte rezultat griji despre noile insertii rând afterfor (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) -} // inlocuieste cu nul de umplere "=" return splitLines (encoded.substring (0, encoded.length () -paddingCount) + "==" subșir (0, paddingCount)) -.} Public static String splitLines (string string) linii string = { "" -pentru (int i = i 0- < string.length()- i += splitLinesAt) {lines += string.substring(i, Math.min(string.length(), i + splitLinesAt))-lines += "rn"-}return lines-}public static void main(String[] args) {for (int i = 0- i < args.length- i++) {System.err.println("encoding "" + args[i] + """)-System.out.println(encode(args[i]))-}}}
  • 11
    Să compilați, folosind javac, gcj, jikes sau un alt compilator și test similar, folosind citatul lui Hobbes din articolul Wikipedia:
    $ $ Java GCJ -C Base64.java Base64 „Omul se distinge, nu numai din cauza lui, ci prin thissingular pasiune de la alte animale, care este o pofta a minții, că prin aperseverance încântării în generarea continuă și ofknowledge neobosită, depășește vehemența scurtă a oricărei plăceri. "
  • 12
    Iată rezultatul:

    codificare „Omul se distinge, nu numai din cauza lui, dar de această singularpassion de la alte animale, care este o pofta a minții, că prin aperseverance încântării în ofknowledge continuă și neobosită generație, depășește vehemența scurt de orice plăcere trupească. „TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
  • 13
    Un meci perfect! Acest lucru înseamnă fie că ambele programe sunt greșite, fie că sunt mai mult sau mai puțin corecte. În acest moment, poate doriți să revizuiți articolul Wikipedia și să citiți RFC-urile pentru a vedea dacă uităm ceva.
  • sfaturi

    • Nu simțiți că întotdeauna trebuie să înțelegeți ceva complet înainte de codificare. Lucrurile pot deveni mai clare pe măsură ce vă programați.
    • Java este o limbă bună pentru programare în general și pentru dispozitive cum ar fi telefoanele mobile, deoarece este singura opțiune a unui programator - dar s-ar putea să afli că sintaxa lui jаvascript sau Python este mai concisă și mai puternică. Limbile diferite au calități și defecte proprii.
    • Încercați să scrieți metoda decode () pentru acest modul!
    • În timp ce citiți RFC-urile relevante este necesar pentru a produce codul, încărcarea informației poate fi înfrângerea - uneori cea mai bună cale este de a citi, de a codifica în funcție de ceea ce înțelegeți și apoi de a vă întoarce și de a verifica funcția peer-to-peer pentru a vedea îndeplinește cerințele obligatorii ale RFC.
    Distribuiți pe rețelele sociale:

    înrudit
    Cum se activează Java Oracle în browsere în Linux UbuntuCum se activează Java Oracle în browsere în Linux Ubuntu
    Cum se descarcă Java în Internet ExplorerCum se descarcă Java în Internet Explorer
    Configurarea aplicației Java HomeConfigurarea aplicației Java Home
    Cum se configurează calea Java_Home în UbuntuCum se configurează calea Java_Home în Ubuntu
    Cum de a crea primul program Java pe Ubuntu LinuxCum de a crea primul program Java pe Ubuntu Linux
    Cum se creează un virusCum se creează un virus
    Cum să scrieți primul program JavaCum să scrieți primul program Java
    Cum se scrie un program Java pentru a calcula mediaCum se scrie un program Java pentru a calcula media
    Cum se execută un fișier Java .jarCum se execută un fișier Java .jar
    Cum se activează Java în FirefoxCum se activează Java în Firefox
    » » Cum de a codifica un string la Base64 cu Java
    © 2021 itholoinfo.com.com