std.krypto
std.krypto samler kryptografi og sikkerhet på ett sted: hashing, passordhåndtering, signering og verifisering, og tilfeldige tokens og UUID-er.
std.krypto samler kryptografi og sikkerhet på ett sted: hashing, passordhåndtering, signering og verifisering, tilfeldige tokens og UUID-er. Poenget er at de riktige, moderne valgene skal være enkle å nå — så du ikke trenger å være kryptograf for å gjøre ting trygt.
Her finner du hash_passord og sjekk_passord for å lagre passord forsvarlig, token og uuid4 for uforutsigbare identifikatorer, signer og verifiser for å beskytte data du sender ut og inn, og hashefunksjoner som sha256 og hmac_sha256. Eldre algoritmer som md5 er med kun for å kunne lese gammelt — bruk dem aldri til noe nytt.
Når bruker du den
Bruk std.krypto når du skal lagre passord trygt, lage uforutsigbare tokens, signere data du sender ut og verifisere det som kommer inn, eller hashe innhold. De trygge valgene er allerede tatt for deg — du trenger bare å velge riktig funksjon.
Slik kommer du i gang
bruk std.krypto som krypto
funksjon start() -> heiltall {
la hash = krypto.hash_passord("hemmeleg") // lagre denne, ikke passordet
hvis krypto.sjekk_passord("hemmeleg", hash) {
skriv("riktig passord")
}
la id = krypto.uuid4() // uforutsigbar identifikator
skriv(id)
returner 0
}Lagre alltid resultatet av hash_passord, aldri passordet selv. sjekk_passord sammenligner et forsøk mot den lagrede hashen på en trygg måte.
Funksjonene
Funksjonene grupperer seg etter formål: identifikatorer og tokens (uuid4, uuid_kompakt, token, token_url, token_sifre), hashing (sha256, sha256_med_salt, hmac_sha256, pbkdf2_sha256), passord (hash_passord, sjekk_passord, er_sterkt_passord), signering (signer, verifiser, usigner, og variantene med utløp), og hjelpere som konstant_lik og base64.
uuid_kompakt() -> tekst— Gir en UUID uten bindestreker.er_gyldig_uuid(s: tekst) -> boolsk— Sann hvis teksten er en gyldig UUID.token(n_bytes: heltall) -> tekst— Et tilfeldig token medn_bytesbyte tilfeldighet.token_url(n_bytes: heltall) -> tekst— Et URL-trygt tilfeldig token.token_sifre(n: heltall) -> tekst— Et tilfeldig token som bare består av sifre.hash_passord(passord: tekst) -> tekst— Hasher et passord trygt for lagring (med salt, tregt med vilje).sjekk_passord(passord: tekst, lagra_hash: tekst) -> boolsk— Sjekker et passordforsøk mot en lagret hash.er_sterkt_passord(passord: tekst) -> boolsk— Sann hvis passordet oppfyller styrkekravene.signer(hemmeleg: tekst, data: tekst) -> tekst— Signerer data med en hemmelighet, så du kan verifisere det senere.verifiser(hemmeleg: tekst, signert: tekst) -> boolsk— Sann hvis en signatur er gyldig for hemmeligheten.usigner(hemmeleg: tekst, signert: tekst) -> tekst— Henter ut de opprinnelige dataene fra noe signert.signer_med_utløp(hemmeleg: tekst, data: tekst, ttl_sek: heltall) -> tekst— Signerer data med en levetid i sekunder.usigner_med_utløp(hemmeleg: tekst, signert: tekst) -> tekst— Henter ut data, men feiler hvis signaturen er utløpt.konstant_lik(a: tekst, b: tekst) -> boolsk— Sammenligner to tekster i konstant tid, uten å lekke gjennom tidsbruk.
Godt å vite
- Lagre aldri passord i klartekst — bruk
hash_passord, og sjekk medsjekk_passord. konstant_liksammenligner uten å lekke informasjon gjennom hvor lang tid det tar; bruk den når du sammenligner hemmeligheter.md5er kun med for bakoverkompatibilitet; velgsha256eller sterkere til alt nytt.
std.krypto er én av modulene i standardbiblioteket. Alt følger med kjøretiden — ingen installasjon, ingen eksterne avhengigheter. Se også Dokumentasjon for språket og kjøretiden.
Les også
- std.tekststd.tekst er verktøykassen for tekst: søke og sjekke, dele og sette sammen, trimme blanktegn, endre mellom store og små bokstaver, og konvertere til og fra tall.
- std.jsonstd.json lar programmet ditt snakke JSON: parse gjør en JSON-tekst om til en ordbok du kan hente verdier fra trygt, og stringify går den andre veien.
- std.filstd.fil er det enkleste laget mellom programmet ditt og filsystemet: sjekk om en fil finnes, les og skriv tekst, eller les og skriv rå bytes — med disk-kapabilitet.