Lahat ng Kailangan Mong Malaman tungkol sa Pag-encrypt sa Java



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman tungkol sa Encryption sa Java at Paano ito magagamit sa Mga Halimbawa.

Ang Encryption ay ang paraan ng paggamit ng mga matematika algorithm upang magbalatkayo ang kahulugan ng isang piraso ng impormasyon upang ang mga may pahintulot na partido lamang ang maaaring maintindihan ito. Sa artikulong ito, tatalakayin namin ang Encryption at Decryption sa sa sumusunod na pagkakasunud-sunod:

Isang Panimula sa Encryption sa Java

Ipinapatupad ang pag-encrypt upang maprotektahan ang aming data (tulad ng mga teksto, pag-uusap ng boses ng ad), nakaupo ito sa isang computer o ipinadala ito sa Internet. Ang mga kamakailang teknolohiya ng pag-encrypt ay mahahalagang elemento ng anumang ligtas na kapaligiran sa computing.





Ang pangunahing papel na ginagampanan ng seguridad ng pag-encrypt ay nakasalalay sa kakayahan ng isang algorithm upang makabuo ng ciphertext (naka-encrypt na teksto) na matigas na bumalik sa orihinal nitong plaintext. Ang paggamit ng mga susi ay lumilikha rin ng isa pang antas ng seguridad sa mga pamamaraan ng pagprotekta sa aming impormasyon. Ang isang susi ay ilang impormasyon, na nagbibigay-daan lamang sa mga humahawak nito upang ma-encode at ma-decode ang isang mensahe.

Ang Encryption at Decryption sa Java



Mga Symmetric Encryption Algorithm

Ang Symmetric algorithms ay gumagamit ng parehong key para sa pag-encrypt at decryption. Ang mga naturang algorithm ay maaari lamang gumana sa block mode (na gumagana sa mga nakapirming sukat ng mga data) o stream mode (na gumagana sa mga piraso o byte ng data). Ang nasabing mga algorithmkaraniwang ginagamit din para sa mga application tulad ng pag-encrypt ng data, pag-encrypt ng file at pag-encrypt na naihatid na data sa mga network ng komunikasyon (tulad ng TLS, mga email, instant na mensahe, atbp.)

Asymmetric (o pampublikong key) Mga Algorithm ng Pag-encrypt

Hindi tulad ng mga simetriko algorithm, na gumagamit ng parehong key para sa parehong pagpapatakbo ng pag-encrypt at decryption, ang mga asymmetric algorithm ay gumagamit ng dalawang magkatulad na mga key para sa dalawang hakbang na ito. Ang mga algorithm na ito ay ginagamit para sa pag-compute ng mga digital na lagda at pangunahing mga protocol ng pagtatatag. Gayunpaman, mayroon din itong hamon na kailangang magamit ang dalawang susi na ginagawang mas kumplikado ang mga bagay.



Upang mai-configure nang ligtas ang anumang pangunahing pamamaraan ng pag-encrypt, napakahalaga na ang lahat ng naturang mga parameter (sa minimum) ay idinisenyo nang tama:

  • Ang pagpili ng tamang algorithm ay mahalaga.
  • Pagpili ng tamang mode ng pagpapatakbo para sa naaangkop na gawain
  • Pagpili ng tamang padding scheme ayon sa kinakailangan
  • Pagpili ng tamang mga susi at kanilang mga laki nang naaayon
  • Tamang pagsisimula sa cryptographically secure na CSPRING.

Napakahalaga na magkaroon ng kamalayan ng pag-configure ng lahat ng mga parameter na ito nang ligtas. Kahit na ang isang maliit na maling pag-configure ay maaaring mapanganib ang isang buong crypto-system at buksan ito sa mga pag-atake mula sa mga hacker at iba pang malware. Samakatuwid, upang mapanatiling simple ang talakayang ito, talakayin lamang natin ang pagsisimula ng independiyenteng algorithm ng isang Cipher. Sa halip na gawin mo ang mga naturang pag-encrypt sa iyong sarili, palaging mas mahusay na hayaan ang mga eksperto na gawin ang kanilang tungkulin sa pag-configure ng higit pang mga pagsasaayos na umaasa sa algorithm, tulad ng mga halagang p at q ng RSA algorithm, atbp. Sa pamamagitan lamang ng pag-configure ng mga panimulang parameter ng cryptographic na higit sa kalahati ng isang dosenang, ginagamit ang mga klase.

kung paano i-convert ang decimal sa binary sa sawa

Ang pagpapakilala ng mga hierarchy ng klase, maraming mga labis na karga na konstruktor / pamamaraan at iba pa, pagdaragdag ng maraming mga kumplikado, na ginagawang Hindi kinakailangan. Nais kong hindi kumplikado ng Java ang mga pangunahing pagsasaayos at gagamitin lamang ang isang mas pinasimple na arkitektura tulad ng Microsoft, kung saan ang lahat ng naturang mga parameter ay nasa loob ng perimeter ng isang solong klase na SymmetricAlgorithm at AsymmetricAlgorithm. Para sa unang tatlong mga parameter na dapat tukuyin (algorithm, mode ng pagpapatakbo at padding scheme), ang isang bagay na Cipher ay gumagamit ng isang string ng pagbabago.

  • Pagpili ng Tamang Algorithm

Ang isang string ng pagbabago ay walang alinlangan na may kasamang pangalan ng isang cryptographic algorithm. Sa pagitan ng simetriko at asymmetric na pag-encrypt, mayroong 11 na mga algorithm (hindi tungkol sa iba't ibang mga kumbinasyon ng PBEWithAnd), na maaaring tukuyin ayon sa Karaniwang Dokumentasyon ng Pangalan ng Algorithm. Sa kanila dalawa lamang (isa para sa bawat isa, simetriko at asymmetric na mga naka-encrypt) na talagang ganap na na-secure.

pag-iiskedyul ng round robin algorithm sa c

Ang natitirang mga algorithm ay alinman sa labis na nasira (DES, RC2, atbp.) O mga basag ay nagsimulang lumitaw (RC5), na ginagawang masira sa sapat na lakas ng CPU - maaari itong masira sa oras na mabasa mo ito. Ang isang developer na may pag-iisip sa seguridad ay maaaring hindi mabasa ang mga pagtutukoy ng NIST, o sundin ang pinakabagong mga pangyayari at pagsasaliksik sa komunidad ng cryptography. Maaari nilang kunin ang sirang o peligrosong mga algorithm, digest o pseudo-random generator.

Palaging para sa:

  1. Symmetric Algorithm: AES / AESWrap block cipher ay ginagamit.

  2. Asymmetric Algorithm: Ginagamit ang RSA.

  • Mode ng Pagpapatakbo

Ang mode ng pagpapatakbo ay isang bahagi ng pagbabago at nauugnay lamang upang harangan ang mga cipher. Kapag gumagamit kami ng mga asymmetric cipher, gamitin ang ECB bilang mode ng pagpapatakbo, na mahalagang isang hack sa likod ng mga eksena, nangangahulugang balewalain ang halagang ito. Ang mga nagbibigay ng Java tulad ng SunJCE, SunPKCS11 ay nagde-default sa mode na ECB para sa simetriko at asymmetric na mga algorithm. Maaari itong maging isang magandang bagay para sa mga walang simetrya na algorithm, ngunit isang masamang ideya para sa mga block cipher.

Maaaring tagubilin ang mga tagabigay na gumawa ng mga secure na default batay sa ginamit na algorithm. Gumamit ng simetriko na pag-encrypt upang mai-save ka mula sa mga pag-atake ng replay o pag-atake na kilala-plaintext. Gayundin, gumamit ng isang pagbabago, na kumpletong tumutukoy sa isang algorithm (ibig sabihin, kasama ang mode ng pagpapatakbo at padding). Huwag kailanman, gumawa ng isang bagay tulad ng nabanggit sa ibaba.

Tulad ng nasa itaas, ang AES algorithm ay gagamitin sa ECB mode ng operasyon, na ginagawang napakadali ng pag-atake ng replay. Para sa bagong pag-unlad, kung may pinakamaliit na posibilidad ng pag-revamping ng lumang trabaho, dapat naming gamitin ang napatunayan na naka-encrypt na may kaugnay na data (AEAD) mode (Halimbawa ng GCM at CCM). Mayroon kaming isang tag ng pagpapatunay na may buong 128 bit na haba. Kung gumagamit kami ng isang hindi napatunayan na mode gumagamit kami ng CBC o CTR sa isang MAC upang patunayan ang ciphertext.

  • Pagpili ng naaangkop na scheme ng padding

Ang mga karaniwang mode ng block cipher ay nangangailangan ng haba ng payak na teksto upang maging isang maramihang mga laki ng block ng pinagbabatayan na algorithm ng pag-encrypt, na bihirang mangyari. Sa gayon, nangangailangan kami ng ilang padding.Ang programa ng Java ay nagbibigay sa amin ng tatlong magkakaibang mga pamamaraan para sa simetriko na pag-encrypt, ang isa ay Walang Padding, na kung saan ay hindi katanggap-tanggap, at isa pang pagiging ISO10126Padding na naatras mula noong 2007).

Samakatuwid, ang angkop lamang na pagpipilian ay ang paggamit ng PKCS5Padding. Ang halo ng ilang mga mode ng pagpapatakbo (halimbawa mode ng CBC) at PKCS5Padding padding scheme ay maaaring humantong sa pag-atake ng padding oracle. Ang hindi pagbanggit sa isang padding scheme ay mas mapanganib kaysa sa pagbibigay ng isang pamamaraan na madaling kapitan sa ilang mga uri ng pag-atake. Ang mode ng pagpapatakbo ng AEAD ay inirerekomenda upang matiyak na protektado ka laban sa mga pag-atake na ito.

  • Mga Asymmetric Algorithm

Sa mga asymmetric algorithm, mayroon kaming pagpipilian na pumili mula sa dalawang mga padding scheme. Mahalagang matiyak na ang mga scheme ng OAEPWithAndPadding lamang ang ginagamit. Sa kaso ng digest, mangyaring gamitin ang alinman sa SHA1 o SHA256 / 384/512. Para sa Mask Generation Function (MGF), mangyaring gamitin ang padding na MGF1 na tinukoy. Ang PKCS1Padding na may RSA ay mahina laban sa mga pag-atake ng Ciphertext [6] mula pa noong 1998.

Pinag-uusapan natin dito ang tamang paraan upang magamit ang isang pagbabago sa isang pamamaraan na 'Cipher.getInstance'.

mga pagkakaiba sa pagitan ng hashmap at hashtable
  • Symmetric Encryption

  • Asymmetric Encryption

Ang antas ng seguridad ng anumang scheme ng pag-encrypt ay direktang proporsyonal sa laki ng susi nito. Ang haba ng susi ay dapat sapat na mahaba upang ang anumang lakas na atake ay hindi ito magagawa nang sabay na ito ay dapat ding maging sapat na maikli upang mapanatili sa isipan ang computational feasibility. Bilang karagdagan, dapat nating subukang isaalang-alang kung ano ang makatiis pa rin sa mga pagsulong sa computational sa susunod na 30 taon.

Sa pamamagitan nito, natapos namin ang katapusan ng Encryption sa artikulong Java. Inaasahan kong nakakuha ka ng ideya ng Encryption at Decryption at kung bakit ito ginagamit sa Java.

Suriin ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng blog na 'Encryption in Java' at babalikan ka namin sa lalong madaling panahon.