Hopp til innhold
NorscodeNorscode

std.krypto

ReferanseAv Norscode-prosjektet

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 med n_bytes byte 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 med sjekk_passord.
  • konstant_lik sammenligner uten å lekke informasjon gjennom hvor lang tid det tar; bruk den når du sammenligner hemmeligheter.
  • md5 er kun med for bakoverkompatibilitet; velg sha256 eller 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å

Tilbake til oversikten