Siirtyminen Node.js:stä cryptoista Web Crypto API:hin: Ohjattu kokemus
Syvällinen kokemus siirtymisestä cryptoista Web Crypto API:hin, tarjoten kattavan oppaan keskittyen kolmeen yleiseen tilanteeseen.
Johdanto
Web Crypto API on uusi JavaScript-työkalu kryptografiaan. Se on yhteensopiva modernien selaimien ja johtavien alustojen, kuten Cloudflare Workers ja Vercel, ja myös Node.js:n kanssa. Tällainen yhteentoimivuus tarkoittaa kehittäjän unelmaa - kirjoita kryptografiakoodi kerran ja suorita se useilla alustoilla käyttäen Web Crypto API:ta.
Kuitenkin, Node.js:llä on jo "crypto"-moduuli, jolla on pitkä historia, jättäen suuren määrän vanhaa koodia, joka tarvitsee siirtää. Tässä artikkelissa syvennymme siirtymiskokemukseen, tarjoten kattavan oppaan keskittyen kolmeen yleiseen tilanteeseen. Pyrimme valaisemaan polkua onnistuneeseen siirtymiseen.
Mikä on Web Crypto API
Web Crypto API, W3C:n avoin standardi JavaScriptille, on kokoelma standardoituja kryptografisia primitiivejä, jotka on määritelty Web Cryptography API -eritelmässä. Se luotiin sen jälkeen, kun useat selaimet ja alustat alkoivat lisätä omia, ei-yhteensopivia kryptografiatoimintojaan.
API tarjoaa primitiivejä avaimen generointiin, salaamiseen ja purkamiseen, digitaalisille allekirjoituksille, avaimen ja bitin johdannaisille ja kryptografiselle digestille. Se keskittyy SubtleCrypto-nimiseen rajapintaan, josta voit löytää lisätietoja ja opetusohjelmia Mozilla MDN dokumentaatiosta.
Mutta Node.js:llä on jo crypto-moduuli?
Node.js kehittäjät ovat yleensä tuttuja crypto-moduulin kanssa. Se tarjoaa kattavan sarjan kryptografisia primitiivejä. Tämä moduuli ei vain tarjoa mekanismeja samoille kryptografisille toiminnoille, jotka on määritelty Web Crypto API:ssa, vaan sisältää usein laajemman valikoiman kryptografisia algoritmeja.
Miksi tarvitsemme silti Web Crypto API:ta? Kun JavaScriptistä tulee suosittu monilla alustoilla ja ympäristöissä, asiakaspuolelta palvelimiin ja erityisesti reunalla, on tärkeää olla alustojen välinen kryptografinen työkalu, joka yksinkertaistaa prosesseja.
Lisäksi Web Crypto API:n standarditoiminnot palauttavat kaikki lupaukset ja tukevat async/await-syntaksia. Tämä on merkittävä etu crypto-moduuliin nähden, joka on synkroninen ja voi estää tapahtumasilmukan.
Ja on mielenkiintoista, että Node.js lisää tukensa Web Crypto API:lle, mikä tarkoittaa, että useimmissa tapauksissa Web Crypto API on täydellinen useimmissa tunnetuissa alustoissa.
Web Crypto API:n käyttäminen
Useimmilla alustoilla Web Crypto API:t ovat käytettävissä globaalin crypto
-objektin kautta, joka sisältää kolme korkeimman tason apuohjelmaa: getRandomValues
, randomUUID
ja subtle
.
On monia eroja verrattuna perinteiseen crypto-moduuliin. Ne voidaan tiivistää kolmeen yleisimpään osaan. Käydään ne läpi ja katsotaan, kuinka siirtyä olemassa olevasta koodista.
#1 Satunnaisten arvojen generointi
Crypto-moduulissa voit luoda satunnaisia arvoja kutsumalla randomBytes
Web Crypto:ssa on samanlainen funktio nimeltä getRandomValues
, mutta palautusarvo on ArrayBuffer
, joten tarvitsemme toisen vaiheen muuntaaksemme sen merkkijonoksi.
#2 Hajautus (tai digest)
createHash
on helppokäyttöinen crypto-moduulissa:
Web Crypto:ssa voimme käyttää subtle.createHash
Kuten näet, muunnos ArrayBufferista
hex-merkkijonoksi on myös tarpeen.
#3 Salaus ja purkaminen
Crypto-moduulissa AES-salaus ja purkaminen voidaan toteuttaa:
Web Crypto:ssa meidän on ensin luotava avain importKey
avulla:
Yhteenveto
Kuten näet, siirtyminen ei ole vaikeaa, päätyönä on muuttaa syntaksi uuden API:n mukaiseksi ja ratkaista ArrayBuffer
TextEncoder
in avulla.
Identiteettituotteena Logto käyttää kryptografiaa monissa paikoissa. Olemme siirtyneet crypto-moduulista Web Crypto API:hin. Tämä siirtyminen antaa meille mahdollisuuden mukautua paremmin reuna-ympäristöihin ja mahdollistaa SDK-koodin suorittamisen turvallisesti selaimessa.