{"title":"Bainistíocht pasfhocal i Django","version":"5.2","locale":"ga","docname":"topics/auth/passwords","url":"/ga/5.2/topics/auth/passwords/","canonical":"https://djangodocs.dev/ga/5.2/topics/auth/passwords/","summary":"Is rud é bainistíocht pasfhocal nár cheart é a athchruthú go ginearálta gan ghá, agus déanann Django iarracht sraith uirlisí slán solúbtha a sholáthar chun…","html":"<h1>Bainistíocht pasfhocal i Django<a class=\"heading-anchor\" href=\"#password-management-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Is rud é bainistíocht pasfhocal nár cheart é a athchruthú go ginearálta gan ghá, agus déanann Django iarracht sraith uirlisí slán solúbtha a sholáthar chun pasfhocail úsáideora a bhainistiú. Déanann an doiciméad seo cur síos ar an gcaoi a stórálann Django pasfhocail, conas is féidir an hashing stórála a chumrú, agus roinnt fóntais chun oibriú le pasfhocail</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">See also</p>\n<p>Cé go bhféadfadh úsáideoirí pasfhocail láidre a úsáid, b'fhéidir go mbeadh ionsaitheoirí in ann cluaise a gcuid naisc. Úsáid: tagairt: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>HTTPS &lt;security-recommendation-ssl&gt;`chun pasfhocail a sheachaint (nó aon sonraí íogaire eile) a sheachaint thar naisc simplí HTTP toisc go mbeidh siad leochaileach do shnifeadh pasfhocal.</p>\n</aside>\n<section id=\"how-django-stores-passwords\">\n<span id=\"auth-password-storage\"></span><h2>Conas a stórálann Django pasfhocail<a class=\"heading-anchor\" href=\"#how-django-stores-passwords\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Soláthraíonn Django córas stórála pasfhocal solúbtha agus úsáideann sé PBKDF2 de réir réamhshocraithe.</p>\n<p>Is teaghrán sa fhormáid seo é an tréith: Attr: ~django.contrib.auth.models.user.password tréith a:class: ~django.contrib.auth.models.user réad:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>&lt;algorithm&gt;$&lt;iterations&gt;$&lt;salt&gt;$&lt;hash&gt;\n</code></pre></div>\n<p>Is iad sin na comhpháirteanna a úsáidtear chun pasfhocal Úsáideora a stóráil, scartha ag an gcarachtar comhartha dollar agus tá: an algartam hashing, líon na n-athrú algartam (fachtóir oibre), an salann randamach, agus an hash pasfhocal mar thoradh air. Tá an algartam ar cheann de roinnt halgartaim hashing aon-bhealach nó stórála pasfhocal is féidir le Django a úsáid; féach thíos. Déanann athrá cur síos ar an líon uaireanta a reáchtáiltear an algartam thar an hash. Is é salann an síol randamach a úsáidtear agus is é an hash toradh ar an fheidhm aon-bhealach.</p>\n<p>De réir réamhshocraithe, úsáideann Django algartam <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> le hash SHA256, meicníocht síneadh pasfhocal a mhol <a class=\"reference external\" href=\"https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf\">NIST</a>. Ba chóir go mbeadh sé seo leordhóthanach don chuid is mó d'úsáideoirí: tá sé slán go leor, ag teastáil go leor ama ríomhaireachta chun briseadh.</p>\n<p>Mar sin féin, ag brath ar do riachtanais, féadfaidh tú algartam difriúil a roghnú, nó fiú algartam saincheaptha a úsáid chun do staid slándála ar leith a mheaitseáil. Arís, níor chóir go gcaithfeadh mórchuid na n-úsáideoirí é seo a dhéanamh - mura bhfuil tú cinnte, is dócha nach ndéanann tú. Má dhéanann tú, léigh ar aghaidh le do thoil:</p>\n<p>Roghnaíonn Django an algartam le húsáid trí chomhairle leis an socrú: setting: PASSWORD_HASHERS. Seo liosta de ranganna algartam hashing a thacaíonn an suiteáil Django seo.</p>\n<p>Chun pasfhocail a stóráil, úsáidfidh Django an chéad hasher in:setting: PASSWORD_HASHERS. Chun pasfhocail nua a stóráil le halgartam difriúil, cuir an algartam is fearr leat ar dtús in:setting: PASSWORD_HASHERS.</p>\n<p>Chun pasfhocail a fhíorú, gheobhaidh Django an hasher sa liosta a mheaitseálann ainm an algartam sa phasfhocal stóráilte. Má ainmníonn pasfhocal stóráilte algartam nach bhfaightear in:setting: PASSWORD_HASHERS, ardóidh sé <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> ag iarraidh a fhíorú.</p>\n<p>Is é an réamhshocrú le haghaidh: socrú: PASSWORD_HASHERS:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Ciallaíonn sé seo go n-úsáidfidh Django <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/PBKDF2\">PBKDF2</a> chun gach pasfhocal a stóráil ach tacóidh sé le pasfhocail a stóráiltear le PBKDF2SHA1, <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Argon2\">argon2</a>, agus <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Bcrypt\">bcrypt</a> a sheiceáil.</p>\n<p>Déanann na cúpla chuid eile cur síos ar chúpla bealach coitianta a d'fhéadfadh ardúsáideoirí a bheith ag iarraidh an socrú seo a</p>\n<section id=\"using-argon2-with-django\">\n<span id=\"argon2-usage\"></span><h3>Ag baint úsáide as Argon2 le Django<a class=\"heading-anchor\" href=\"#using-argon2-with-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is é <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Argon2\">Argon2</a> buaiteoir an “Comórtas Hashing Pasfhocal” 2015, comórtas oscailte eagraithe ag an bpobal chun algartam hashing den chéad ghlúin eile a roghnú. Tá sé deartha chun nach mbeadh sé níos éasca a ríomh ar chrua-earraí saincheaptha ná mar atá sé a ríomh ar ghnáth LAP. Is é Argon2id an leagan réamhshocraithe don hasher pasfhocal Argon2.</p>\n<p>Ní hé <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Argon2\">Argon2</a> an réamhshocrú do Django toisc go dteastaíonn leabharlann tríú páirtí uaidh. Molann an painéal Comórtais Hashing Pasfhocal, áfach, Argon2 a úsáid láithreach seachas na halgartaim eile a thacaíonn Django.</p>\n<p>Chun Argon2id a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:</p>\n<ol class=\"arabic\">\n<li><p>Suiteáil an pacáiste: pypi: argon2-cffi. Is féidir é seo a dhéanamh trí <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-m</span> <span class=\"pre\">pip</span> <span class=\"pre\">install</span> <span class=\"pre\">django</span> <span class=\"pre\">[argon2]</span> <span class=\"pre\">``a</span> <span class=\"pre\">reáchtáil,</span> <span class=\"pre\">atá</span> <span class=\"pre\">comhionann</span> <span class=\"pre\">le</span> <span class=\"pre\">``python</span> <span class=\"pre\">-m</span> <span class=\"pre\">pip</span> <span class=\"pre\">install</span> <span class=\"pre\">argon2-cffi</span></code> (in éineacht le haon riachtanas leagan ó <code class=\"docutils literal notranslate\"><span class=\"pre\">pyproject.toml</span></code> Django).</p></li>\n<li><p>Athraigh: Socrú: PASSWORD_HASHERS chun Argon2PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>&lt;password-upgrades&gt;Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>pasfhocail a uasghrádú <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</li>\n</ol>\n</section>\n<section id=\"using-bcrypt-with-django\">\n<span id=\"bcrypt-usage\"></span><h3>Ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">bcrypt</span></code> le Django<a class=\"heading-anchor\" href=\"#using-bcrypt-with-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is algartam stórála pasfhocal móréilimh é <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Bcrypt\">Bcrypt</a> atá deartha go sonrach le haghaidh stórála pasfhocal fadtéarmach. Ní hé an réamhshocrú a úsáideann Django é ós rud é go n-éilíonn sé leabharlanna tríú páirtí a úsáid, ach ós rud é go bhféadfadh go leor daoine é a úsáid tacaíonn Django le bcrypt gan iarracht íosta.</p>\n<p>Chun Bcrypt a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:</p>\n<ol class=\"arabic\">\n<li><p>Suiteáil an pacáiste: pypi: bcrypt. Is féidir é seo a dhéanamh trí <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">-m</span> <span class=\"pre\">pip</span> <span class=\"pre\">install</span> <span class=\"pre\">django</span> <span class=\"pre\">[bcrypt]</span> <span class=\"pre\">``a</span> <span class=\"pre\">reáchtáil,</span> <span class=\"pre\">atá</span> <span class=\"pre\">comhionann</span> <span class=\"pre\">le</span> <span class=\"pre\">``python</span> <span class=\"pre\">-m</span> <span class=\"pre\">pip</span> <span class=\"pre\">install</span> <span class=\"pre\">bcrypt</span></code> (in éineacht le haon riachtanas leagan ó <code class=\"docutils literal notranslate\"><span class=\"pre\">pyproject.toml</span></code> Django).</p></li>\n<li><p>Athraigh: Socrú: PASSWORD_HASHERS chun bCryptSha256PasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe, chuirfeá:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>&lt;password-upgrades&gt;Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>pasfhocail a uasghrádú <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</li>\n</ol>\n<p>Sin é - anois úsáidfidh do shuiteáil Django Bcrypt mar an algartam stórála réamhshocraithe.</p>\n</section>\n<section id=\"using-scrypt-with-django\">\n<span id=\"scrypt-usage\"></span><h3>Ag baint úsáide as <code class=\"docutils literal notranslate\"><span class=\"pre\">scrypt</span></code> le Django<a class=\"heading-anchor\" href=\"#using-scrypt-with-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a> cosúil le PBKDF2 agus bcrypt agus líon socraithe athraitheanna a úsáid chun ionsaithe brute-force a mhoilliú. Mar sin féin, toisc nach dteastaíonn go leor cuimhne ó PBKDF2 agus bcrypt, is féidir le hionsaitheoirí a bhfuil dóthain acmhainní acu ionsaithe a sheoladh chun an próiseas ionsaitheora a bhrostú. Tá <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a> deartha go sonrach chun níos mó feidhmeanna díorthaithe bunaithe ar phasfhocal eile d'fhonn teorainn a chur ar an méid comhthreomhaíochta is féidir le hionsaitheoir a úsáid, féach: rfc: 7914 le haghaidh tuilleadh sonraí.</p>\n<p>Chun <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a> a úsáid mar do algartam stórála réamhshocraithe, déan an méid seo a leanas:</p>\n<ol class=\"arabic\">\n<li><p>Athraigh: Socrú: PASSWORD_HASHERS chun ScryptPasswordHasher` a liostáil ar dtús. Is é sin, i do chomhad socruithe:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>&lt;password-upgrades&gt;Coinnigh agus/nó cuir aon iontrálacha sa liosta seo má theastaíonn Django uait to:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>pasfhocail a uasghrádú <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</li>\n</ol>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Éilíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">scrypt</span></code> OpenSSL 1.1+.</p>\n</aside>\n</section>\n<section id=\"increasing-the-salt-entropy\">\n<h3>An t-entróp salainn a mhéadú<a class=\"heading-anchor\" href=\"#increasing-the-salt-entropy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cuimsíonn an chuid is mó de na hashes pasfhocal salann in éineacht lena hash pasfhocal d'fhonn cosaint a dhéanamh ar ionsaithe tábla tuar ceatha. Is luach randamach é an salann féin a mhéadaíonn méid agus dá bhrí sin costas an tábla ceatha agus tá sé socraithe faoi láthair ag 128 giotán leis an luach salt_entropy` sa BasePasswordHasher`. Mar a laghdaíonn costais ríomhaireachta agus stórála ba chóir an luach seo a ardú Agus do phasfhocal féin á chur i bhfeidhm tá saor agat an luach seo a shárú d'fhonn an leibhéal entróp atá ag teastáil a úsáid le haghaidh do hashes pasfhocal. Tomhaistear salt_entropy` i ngiotáin.</p>\n<aside class=\"admonition-implementation-detail admonition\">\n<p class=\"admonition-title\">Sonraí cur chun feidhme</p>\n<p>Mar gheall ar an modh ina stóráiltear luachanna salainn is íosluach é an luach salt_entropy` go héifeachtach. Mar shampla, chuirfeadh luach 128 salann ar fáil ina mbeadh 131 giotán d'entróp i ndáiríre.</p>\n</aside>\n</section>\n<section id=\"increasing-the-work-factor\">\n<span id=\"increasing-password-algorithm-work-factor\"></span><h3>An fachtóir oibre a mhéadú<a class=\"heading-anchor\" href=\"#increasing-the-work-factor\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"pbkdf2-and-bcrypt\">\n<h4>PBKDF2 agus bcrypt<a class=\"heading-anchor\" href=\"#pbkdf2-and-bcrypt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Úsáideann halgartaim PBKDF2 agus bcrypt roinnt athrá nó babhtaí hashing. Moillíonn sé seo ionsaitheoirí d'aon ghnó, rud a fhágann go bhfuil ionsaithe i gcoinne pasfhoc Mar sin féin, de réir mar a mhéadaíonn cumhacht ríomhaireachta, is gá líon na n-athrá a mhéadú. Tá réamhshocrú réasúnta roghnaithe againn (agus méadóimid sé le gach scaoileadh de Django), ach b'fhéidir gur mhaith leat é a thiúnadh suas nó síos, ag brath ar do riachtanais slándála agus ar an chumhacht próiseála atá ar fáil. Chun é sin a dhéanamh, déanfaidh tú an algartam cuí a fho-aicmiú agus an paraiméadar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>iterations` a shárú (bain úsáid as an paraiméadar <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>rounds` agus tú ag fo-aicmiú hasher bcrypt). Mar shampla, chun líon na n-athrú a úsáideann an algartam PBKDF2 réamhshocraithe a mhéadú:</p>\n<ol class=\"arabic\">\n<li><p>Cruthaigh fo-aicme de django.contrib.auth.hashers.pbkdf2PasswordHasher`:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.hashers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">PBKDF2PasswordHasher</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyPBKDF2PasswordHasher</span><span class=\"p\">(</span><span class=\"n\">PBKDF2PasswordHasher</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A subclass of PBKDF2PasswordHasher that uses 100 times more iterations.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"n\">iterations</span> <span class=\"o\">=</span> <span class=\"n\">PBKDF2PasswordHasher</span><span class=\"o\">.</span><span class=\"n\">iterations</span> <span class=\"o\">*</span> <span class=\"mi\">100</span>\n</code></pre></div>\n<p>Sábháil seo áit éigin i do thionscadal. Mar shampla, b'fhéidir go gcuirfeá é seo i gcomhad mar <code class=\"docutils literal notranslate\"><span class=\"pre\">myproject/hashers.py</span></code>.</p>\n</li>\n<li><p>Cuir do hasher nua leis mar an gcéad iontráil in:setting: PASSWORD_HASHERS:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;myproject.hashers.MyPBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</li>\n</ol>\n<p>Sin é - anois úsáidfidh do shuiteáil Django níos mó athraithe nuair a stóráil sé pasfhocail ag baint úsáide as PBKDF2.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Is fachtóir oibre logartamach é bcrypt <code class=\"docutils literal notranslate\"><span class=\"pre\">babhtaí</span> <span class=\"pre\">``,</span> <span class=\"pre\">m.sh.</span> <span class=\"pre\">ciallaíonn</span> <span class=\"pre\">12</span> <span class=\"pre\">babhta</span> <span class=\"pre\">``2</span> <span class=\"pre\">**</span> <span class=\"pre\">12</span></code> athraitheanna.</p>\n</aside>\n</section>\n<section id=\"argon2\">\n<h4>Argon2<a class=\"heading-anchor\" href=\"#argon2\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Tá na tréithe seo a leanas ag Argon2 is féidir a shaincheapadh:</p>\n<ol class=\"arabic simple\">\n<li><p>Rialaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">time_cost</span></code> líon na n-athrá laistigh den hash.</p></li>\n<li><p>Rialaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">memory_cost</span></code> méid na cuimhne nach mór a úsáid le linn ríomh an hash.</p></li>\n<li><p>Rialaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">parallelism</span></code> cé mhéad CPU is féidir ríomh an hash a dhéanamh comhthreomhar orthu.</p></li>\n</ol>\n<p>Is dócha go bhfuil luachanna réamhshocraithe na dtréithe seo go breá duit. Má chinneann tú go bhfuil an hash pasfhocal ró-tapa nó ró-mhall, is féidir leat é a tweak mar seo a leanas:</p>\n<ol class=\"arabic simple\">\n<li><p>Roghnaigh paralelism` mar líon na snáitheanna is féidir leat a spáráil a ríomh an hash.</p></li>\n<li><p>Roghnaigh memory_cost` chun a bheith mar an KiB de chuimhne is féidir leat a spáráil.</p></li>\n<li><p>Coigeartaigh <code class=\"docutils literal notranslate\"><span class=\"pre\">time_cost</span></code> agus tomhas an t-am a thógann hashú pasfhocal. Roghnaigh <code class=\"docutils literal notranslate\"><span class=\"pre\">time_cost</span></code> a thógann am inghlactha duit. Má tá <code class=\"docutils literal notranslate\"><span class=\"pre\">time_cost</span></code> socraithe go 1 go neamhghlactha go mall, ísligh <code class=\"docutils literal notranslate\"><span class=\"pre\">memory_cost</span></code>.</p></li>\n</ol>\n<aside class=\"admonition-memory-cost-interpretation admonition\">\n<p class=\"admonition-title\">Léirmhíniú <code class=\"docutils literal notranslate\"><span class=\"pre\">memory_cost</span></code></p>\n<p>Léirmhíníonn fóntais líne ordaithe argon2 agus roinnt leabharlanna eile an paraiméadar memory_cost difriúil ón luach a úsáideann Django. Tugann an tiontú le <code class=\"docutils literal notranslate\"><span class=\"pre\">memory_cost</span> <span class=\"pre\">==</span> <span class=\"pre\">2</span> <span class=\"pre\">**</span> <span class=\"pre\">memory_cost_commandline</span></code>.</p>\n</aside>\n</section>\n<section id=\"scrypt\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">scrípt</span></code><a class=\"heading-anchor\" href=\"#scrypt\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Tá na tréithe seo a leanas ag <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a> is féidir a shaincheapadh:</p>\n<ol class=\"arabic simple\">\n<li><p>Rialaíonn <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>work_factor <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>líon na n-athrá laistigh den hash.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Bloc_size</span></code></p></li>\n<li><p>Rialaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">parallelism</span></code> cé mhéad snáitheanna a bheidh ag rith go comhthreomhar.</p></li>\n<li><p>Cuireann maxmem` teorainn leis an méid uasta na cuimhne is féidir a úsáid le linn ríomh an hash. Réamhshocraithe go <code class=\"docutils literal notranslate\"><span class=\"pre\">0</span></code>, rud a chiallaíonn an teorannú réamhshocraithe ón leabharlann OpenSSL.</p></li>\n</ol>\n<p>Tá réamhshocruithe réasúnta roghnaithe againn, ach b'fhéidir gur mhaith leat é a thiúnú suas nó síos, ag brath ar do riachtanais slándála agus ar an chumhacht próiseála atá ar fáil.</p>\n<aside class=\"admonition-estimating-memory-usage admonition\">\n<p class=\"admonition-title\">Úsáid cuimhne a mheas</p>\n<p>Is é an riachtanas cuimhne íosta <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Scrypt\">scrypt</a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">work_factor</span> <span class=\"o\">*</span> <span class=\"mi\">2</span> <span class=\"o\">*</span> <span class=\"n\">block_size</span> <span class=\"o\">*</span> <span class=\"mi\">64</span>\n</code></pre></div>\n<p>mar sin b'fhéidir go mbeidh ort <code class=\"docutils literal notranslate\"><span class=\"pre\">maxmem</span></code> a tweak agus na luachanna <code class=\"docutils literal notranslate\"><span class=\"pre\">work_factor</span></code> nó block_size` á athrú.</p>\n</aside>\n</section>\n</section>\n<section id=\"password-upgrading\">\n<span id=\"password-upgrades\"></span><h3>Uasghrádú Pasfho<a class=\"heading-anchor\" href=\"#password-upgrading\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nuair a logálann úsáideoirí isteach, má stóráiltear a gcuid pasfhocail le rud ar bith seachas an algartam is fearr leat, déanfaidh Django an algartam a uasghrádú go huathoibríoch go dt Ciallaíonn sé seo go n-éireoidh sean-shuiteálacha de Django níos sábháilte go huathoibríoch de réir mar a logálann úsáideoirí isteach, agus ciallaíonn sé freisin gur féidir leat aistriú chuig halgartaim stórála nua (agus níos fearr) de réir mar a chruthaítear iad.</p>\n<p>Mar sin féin, ní féidir le Django ach pasfhocail a úsáideann halgartaim a luaitear in:setting: PASSWORD_HASHERS a uasghrádú, mar sin agus tú ag uasghrádú chuig córais nua ba chóir duit a chinntiú nach ndéanfaidh tú iontrálacha a bhaint riamh ón liosta seo. Má dhéanann tú, ní bheidh úsáideoirí a úsáideann halgartaim neamhluaite in ann uasghrádú a dhéanamh. Déanfar pasfhocail hashaithe a nuashonrú nuair a mhéadaítear (nó ag laghdú) líon na n-athrú PBKDF2, babhtaí bcrypt, nó tréithe argon2.</p>\n<p>Bí ar an eolas mura bhfuil na pasfhocail go léir i do bhunachar sonraí ionchódaithe in algartam réamhshocraithe, d'fhéadfá a bheith leochaileach d'ionsaí uainiúcháin úsáideora mar gheall ar difríocht idir fad iarratais logála isteach d'úsáideoir le haghaidh pasfhocal ionchódaithe in algartam neamhréamhshocraithe agus fad iarratais logála isteach d'úsáideoir nach bhfuil ann (a ritheann an hasher réamhshocraithe). &lt;wrapping-password-hashers&gt;B'fhéidir go mbeidh tú in ann é seo a mhaolú trí:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>hashes pasfhocal níos sine a uasghrádú <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n</section>\n<section id=\"password-upgrading-without-requiring-a-login\">\n<span id=\"wrapping-password-hashers\"></span><h3>Uasghrádú pasfhocal gan logáil isteach a dhéanamh<a class=\"heading-anchor\" href=\"#password-upgrading-without-requiring-a-login\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tá bunachar sonraí agat le hash níos sine, lag mar MD5, b'fhéidir gur mhaith leat na hashes sin a uasghrádú féin in ionad fanacht go dtarlóidh an t-uasghrádú nuair a logálann úsáideoir isteach (nach bhféadfadh tarlú riamh mura bhfillfidh úsáideoir ar do shuíomh). Sa chás seo, is féidir leat hasher pasfhocal “fillte” a úsáid.</p>\n<p>Don sampla seo, aistróimid bailiúchán de hashes MD5 chun PBKDF2 (MD5 (pasfhocal) a úsáid agus cuirfimid an hasher pasfhocal comhfhreagrach le seiceáil an chuir úsáideoir an bhféadfadh úsáideoir an focal faire ceart isteach ar logáil isteach. Glacaimid leis go bhfuilimid ag úsáid an tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Úsáideoir</span> <span class=\"pre\">``ionsuite</span> <span class=\"pre\">agus</span> <span class=\"pre\">go</span> <span class=\"pre\">bhfuil</span> <span class=\"pre\">aip</span> <span class=\"pre\">``cuntas</span></code> ag ár dtionscadal. Is féidir leat an patrún a mhodhnú chun oibriú le haon algartam nó le samhail úsáideora saincheaptha.</p>\n<p>Ar dtús, cuirfimid an hasher saincheaptha leis:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">accounts/hashers.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.auth.hashers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"p\">(</span>\n    <span class=\"n\">PBKDF2PasswordHasher</span><span class=\"p\">,</span>\n    <span class=\"n\">MD5PasswordHasher</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">PBKDF2WrappedMD5PasswordHasher</span><span class=\"p\">(</span><span class=\"n\">PBKDF2PasswordHasher</span><span class=\"p\">):</span>\n    <span class=\"n\">algorithm</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;pbkdf2_wrapped_md5&quot;</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">encode_md5_hash</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">md5_hash</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">,</span> <span class=\"n\">iterations</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"n\">md5_hash</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">,</span> <span class=\"n\">iterations</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">encode</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">,</span> <span class=\"n\">iterations</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">_</span><span class=\"p\">,</span> <span class=\"n\">md5_hash</span> <span class=\"o\">=</span> <span class=\"n\">MD5PasswordHasher</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"n\">password</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;$&quot;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">encode_md5_hash</span><span class=\"p\">(</span><span class=\"n\">md5_hash</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">,</span> <span class=\"n\">iterations</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>D'fhéadfadh go mbeadh cuma ar an imirce sonraí mar:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">cuntas/imirceach/0002_migrate_md5_passwords.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">migrations</span>\n\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">..hashers</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">PBKDF2WrappedMD5PasswordHasher</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">forwards_func</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"p\">,</span> <span class=\"n\">schema_editor</span><span class=\"p\">):</span>\n    <span class=\"n\">User</span> <span class=\"o\">=</span> <span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s2\">&quot;auth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;User&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">users</span> <span class=\"o\">=</span> <span class=\"n\">User</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">password__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;md5$&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">hasher</span> <span class=\"o\">=</span> <span class=\"n\">PBKDF2WrappedMD5PasswordHasher</span><span class=\"p\">()</span>\n    <span class=\"k\">for</span> <span class=\"n\">user</span> <span class=\"ow\">in</span> <span class=\"n\">users</span><span class=\"p\">:</span>\n        <span class=\"n\">algorithm</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">,</span> <span class=\"n\">md5_hash</span> <span class=\"o\">=</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">password</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s2\">&quot;$&quot;</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">password</span> <span class=\"o\">=</span> <span class=\"n\">hasher</span><span class=\"o\">.</span><span class=\"n\">encode_md5_hash</span><span class=\"p\">(</span><span class=\"n\">md5_hash</span><span class=\"p\">,</span> <span class=\"n\">salt</span><span class=\"p\">)</span>\n        <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">update_fields</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s2\">&quot;password&quot;</span><span class=\"p\">])</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Migration</span><span class=\"p\">(</span><span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">Migration</span><span class=\"p\">):</span>\n    <span class=\"n\">dependencies</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;accounts&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;0001_initial&quot;</span><span class=\"p\">),</span>\n        <span class=\"c1\"># replace this with the latest migration in contrib.auth</span>\n        <span class=\"p\">(</span><span class=\"s2\">&quot;auth&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;####_migration_name&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n\n    <span class=\"n\">operations</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n        <span class=\"n\">migrations</span><span class=\"o\">.</span><span class=\"n\">RunPython</span><span class=\"p\">(</span><span class=\"n\">forwards_func</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></figure>\n<p>Bí ar an eolas go dtógfaidh an imirce seo ar ord cúpla nóiméad do roinnt mílte úsáideoir, ag brath ar luas do chrua-earraí.</p>\n<p>Faoi dheireadh, cuirfimid suíomh a:setting: PASSWORD_HASHERS leis:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">mysite/settings.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"n\">PASSWORD_HASHERS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;accounts.hashers.PBKDF2WrappedMD5PasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Cuir aon hashers eile a úsáideann do shuíomh sa liosta seo san áireamh.</p>\n</section>\n<section id=\"included-hashers\">\n<span id=\"auth-included-hashers\"></span><h3>Hashers san áireamh<a class=\"heading-anchor\" href=\"#included-hashers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is é an liosta iomlán de hashers atá san áireamh i Django:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"p\">[</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.Argon2PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptSHA256PasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.BCryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.ScryptPasswordHasher&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth.hashers.MD5PasswordHasher&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Is iad na hainmneacha algartam comhfhreagrach</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pbkdf2_sha256</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">pbkdf2_sha1</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">Argon2</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bcrypt_sha256</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bcrypt</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">scrípt</span></code></p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">md5</span></code></p></li>\n</ul>\n</section>\n<section id=\"writing-your-own-hasher\">\n<span id=\"write-your-own-password-hasher\"></span><h3>Do hasher féin a scríobh<a class=\"heading-anchor\" href=\"#writing-your-own-hasher\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má scríobhann tú do phasfhocal féin ina bhfuil fachtóir oibre cosúil le roinnt athraithe, ba cheart duit modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>harden_runtime (self, password, ionchódaithe) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>a chur i bhfeidhm chun an bearna réamhshocraithe idir an fachtóir oibre a sholáthraítear sa phasfhocal <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>encoded <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>agus fachtóir oibre réamhshocraithe an hasher. Cuireann sé seo cosc ar ionsaí uainiúcháin áireamh úsáideora mar gheall ar difríocht idir iarratas logála isteach d'úsáideoir le pasfhocal atá ionchódaithe i líon níos sine athrá agus úsáideoir nach bhfuil ann (a ritheann líon réamhshocraithe athraithe an hasher réamhshocraithe).</p>\n<p>Ag glacadh le PBKDF2 mar shampla, má tá 20,000 athraitheach sa <code class=\"docutils literal notranslate\"><span class=\"pre\">encoded</span> <span class=\"pre\">``agus</span> <span class=\"pre\">is</span> <span class=\"pre\">é</span> <span class=\"pre\">30,000</span> <span class=\"pre\">réamhshocraithe</span> <span class=\"pre\">an</span> <span class=\"pre\">hasher,</span> <span class=\"pre\">ba</span> <span class=\"pre\">chóir</span> <span class=\"pre\">don</span> <span class=\"pre\">modh</span> <span class=\"pre\">``pasfhocal</span></code> a reáchtáil trí 10,000 athrú eile de PBKDF2.</p>\n<p>Mura bhfuil fachtóir oibre ag do hasher, cuir an modh i bhfeidhm mar no-op (<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>pass <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>).</p>\n</section>\n</section>\n<section id=\"module-django.contrib.auth.hashers\">\n<span id=\"manually-managing-a-user-s-password\"></span><h2>Pasfhocal úsáideora a bhainistiú de láimh<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.hashers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Soláthraíonn an modúl:MOD: django.contrib.auth.hashers sraith feidhmeanna chun pasfhocail hashaithe a chruthú agus a bhailíochtú. Is féidir leat iad a úsáid go neamhspleách ón tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.hashers.check_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">check_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoded</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">setter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">preferred</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'default'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.hashers.check_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.hashers.acheck_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">acheck_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoded</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">asetter</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">preferred</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'default'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.hashers.acheck_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Leagan asincrón</em>: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>acheck_password () ``</p>\n<p>Más mian leat úsáideoir a fhíordheimhniú de láimh trí phasfhocal téacs simplí a chur i gcomparáid leis an bhfocal faire hasháite sa bhunachar sonraí, bain úsáid as an bhfeidhm áisiúlachta: func: check_password. Tógann sé dhá argóint éigeantach: an pasfhocal gnáthtéacs le seiceáil, agus luach iomlán réimse pasfhocal ``úsáideora sa bhunachar sonraí le seiceáil ina choinne. Filleann sé ``True` má mheaitseálann siad, <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> ar shlí eile. Go roghnach, is féidir leat <code class=\"docutils literal notranslate\"><span class=\"pre\">setter</span></code> inghlaonta a rith a thógann an pasfhocal agus a ghlaofar air nuair is gá duit é a athghiniúint. Is féidir leat <code class=\"docutils literal notranslate\"><span class=\"pre\">preferred</span></code> a rith freisin chun algartam hashing a athrú mura dteastaíonn uait an réamhshocrú a úsáid (an chéad iontráil de shuíomh <code class=\"docutils literal notranslate\"><span class=\"pre\">PASSWORD_HASHERS</span></code>). Féach:ref: auth-included-hashers le haghaidh ainm algartam gach hasher.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.hashers.make_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">make_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">salt</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">hasher</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'default'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.hashers.make_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cruthaíonn sé pasfhocal hashed san fhormáid a úsáideann an feidhmchlár seo. Tógann sé argóint éigeantach amháin: an pasfhocal i dtéacs simplí (teaghrán nó béite). Go roghnach, is féidir leat salann agus algartam hashing a sholáthar le húsáid, mura dteastaíonn uait na réamhshocruithe a úsáid (an chéad iontráil de shuíomh <code class=\"docutils literal notranslate\"><span class=\"pre\">PASSWORD_HASHERS</span></code>). Féach:ref: auth-included-hashers le haghaidh ainm algartam gach hasher. Más é <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> an argóint pasfhocal, cuirtear pasfhocal neamhúsáidte ar ais (ceann nach nglacfaidh: func: check_password riamh).</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.hashers.is_password_usable\">\n<span class=\"sig-name descname\"><span class=\"pre\">is_password_usable</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoded_password</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.hashers.is_password_usable\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Filleann <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> má tá an pasfhocal mar thoradh ar:meth: .user.set_unusable_password.</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.contrib.auth.password_validation\">\n<span id=\"id3\"></span><span id=\"password-validation\"></span><h2>Bailíochtú pasfhocal<a class=\"heading-anchor\" href=\"#module-django.contrib.auth.password_validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is minic a roghnaíonn úsáideoirí pasfhocail Chun cabhrú leis an bhfadhb seo a mhaolú, cuireann Django bailíochtú pasfhocal plugáilte ar fáil Is féidir leat bailíochtóirí pasfhocal iolracha a chumrú ag an am céanna. Tá cúpla bailíochtóir san áireamh i Django, ach is féidir leat do chuid féin a scríobh freisin.</p>\n<p>Caithfidh gach bailíochtóir pasfhocal téacs cabhrach a sholáthar chun na riachtanais a mhíniú don úsáideoir, pasfhocal ar leith a bhailíochtú agus teachtaireacht earráide a thabhairt ar ais mura gcomhlíonann sé na riachtanais, agus glaoch ar ais a shainiú go roghnach a chuirfear in iúl nuair a athraítear an focal faire d'úsáideoir. Is féidir le bailíochtóirí socruithe roghnacha a bheith acu freisin chun a n-iompar a mhíniú.</p>\n<p>Tá bailíochtú á rialú ag an socrú: setting: AUTH_PASSWORD_VALIDATORS. Is é liosta folamh an réamhshocraithe don socrú, rud a chiallaíonn nach gcuirtear aon bhailíochtóirí i bhfeidhm. I dtionscadail nua a cruthaíodh leis an teimpléad réamhshocraithe: djadmin: startproject, cumasaítear tacar bailíochtóirí de réir réamhshocraithe.</p>\n<p>De réir réamhshocraithe, úsáidtear bailíochtóirí sna foirmeacha chun pasfhocail a athshocrú nó a athrú agus sna horduithe bainistíochta: djadmin: createsuperuser agus:djadmin: changepassword. Ní chuirtear bailíochtóirí i bhfeidhm ag an leibhéal samhail, mar shampla in <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>User.objects.create_user () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>create_superuser () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>, toisc go nglacaimid leis go n-idirghníomhaíonn forbróirí, ní úsáideoirí, le Django ag an leibhéal sin agus freisin toisc nach ritheann bailíochtú samhail go huathoibríoch mar chuid de mhúnlaí a chruthú.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Is féidir le bailíochtú pasfhocal cosc a chur ar úsáid go leor cineálacha pasfhocail laga. Mar sin féin, ní ráthaíonn an fíric go dtéann pasfhocal ar na bailíochtóirí go léir gur pasfhocal láidir é. Tá go leor fachtóirí ann a d'fhéadfadh pasfhocal a lagú nach féidir fiú na bailíochtóirí pasfhocal is úire a bhrath.</p>\n</aside>\n<section id=\"enabling-password-validation\">\n<h3>Cumasú bailíochtú pasfhocal<a class=\"heading-anchor\" href=\"#enabling-password-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá bailíochtú pasfhocal cumraithe sa socrú:: AUTH_PASSWORD_VALIDATORS:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">AUTH_PASSWORD_VALIDATORS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.auth.password_validation.UserAttributeSimilarityValidator&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.auth.password_validation.MinimumLengthValidator&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;OPTIONS&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;min_length&quot;</span><span class=\"p\">:</span> <span class=\"mi\">9</span><span class=\"p\">,</span>\n        <span class=\"p\">},</span>\n    <span class=\"p\">},</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.auth.password_validation.CommonPasswordValidator&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n    <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.auth.password_validation.NumericPasswordValidator&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Cumasaíonn an sampla seo na ceithre bhailíochtóirí san áireamh</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">UserAttributeSimilarityValidator</span></code>, a sheiceálann an chosúlacht idir an pasfhocal agus sraith tréithe an úsáideora.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">MinimumLengthValidator</span></code>, a sheiceálann an gcomhlíonann an pasfhocal fad íosta. Tá an bailíochtóir seo cumraithe le rogha saincheaptha: éilíonn sé anois go mbeadh an fad íosta ná naoi charachtar, in ionad na hocht réamhshocraithe.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">CommonPasswordValidator</span></code>, a sheiceálann an dtarlaíonn an pasfhocal i liosta de phasfhocail choitianta. De réir réamhshocraithe, déanann sé comparáid le liosta san áireamh de 20,000 pasfhocal coitianta.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">NumericPasswordValidator</span></code>, a sheiceálann an bhfuil an pasfhocal uimhriúil go hiomlán.</p></li>\n</ul>\n<p>Maidir le <code class=\"docutils literal notranslate\"><span class=\"pre\">UserAttributeSimilarityValidator</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">CommonPasswordValidator</span></code>, táimid ag úsáid na socruithe réamhshocraithe sa sampla seo. Níl aon socruithe ag <code class=\"docutils literal notranslate\"><span class=\"pre\">NumericPasswordValidator</span></code>.</p>\n<p>Cuirtear na téacsanna cabhrach agus aon earráidí ó bhailíochtóirí pasfhocal ar ais i gcónaí san ord a liostaítear ion:setting: AUTH_PASSWORD_VALIDATORS.</p>\n</section>\n<section id=\"included-validators\">\n<span id=\"included-password-validators\"></span><h3>Bailíochtóirí san áireamh<a class=\"heading-anchor\" href=\"#included-validators\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Cuimsíonn Django ceithre bhailíochtóir:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.MinimumLengthValidator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MinimumLengthValidator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">min_length</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">8</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.MinimumLengthValidator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bailíonn sé go bhfuil an pasfhocal ar fad íosta. Is féidir an fad íosta a shaincheapadh leis an bparaiméadar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>min_length <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.MinimumLengthValidator.get_error_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_error_message</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.MinimumLengthValidator.get_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>A hook for customizing the <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> error message. Defaults\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;This</span> <span class=\"pre\">password</span> <span class=\"pre\">is</span> <span class=\"pre\">too</span> <span class=\"pre\">short.</span> <span class=\"pre\">It</span> <span class=\"pre\">must</span> <span class=\"pre\">contain</span> <span class=\"pre\">at</span> <span class=\"pre\">least</span> <span class=\"pre\">&lt;min_length&gt;</span>\n<span class=\"pre\">characters.&quot;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.MinimumLengthValidator.get_help_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_help_text</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.MinimumLengthValidator.get_help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A hook for customizing the validator's help text. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Your</span>\n<span class=\"pre\">password</span> <span class=\"pre\">must</span> <span class=\"pre\">contain</span> <span class=\"pre\">at</span> <span class=\"pre\">least</span> <span class=\"pre\">&lt;min_length&gt;</span> <span class=\"pre\">characters.&quot;</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.UserAttributeSimilarityValidator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">UserAttributeSimilarityValidator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user_attributes</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_USER_ATTRIBUTES</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">max_similarity</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">0.7</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.UserAttributeSimilarityValidator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bailíonn sé go bhfuil an pasfhocal difriúil go leor ó thréithe áirithe an úsáideora.</p>\n<p>Ba chóir go mbeadh an paraiméadar <code class=\"docutils literal notranslate\"><span class=\"pre\">user_attributes</span></code> ina athraitheach d'ainmneacha tréithe úsáideora le comparáid a dhéanamh leo. Mura gcuirtear an argóint seo ar fáil, úsáidtear an réamhshocrú: <code class=\"docutils literal notranslate\"><span class=\"pre\">``ainm</span> <span class=\"pre\">úsáideora',</span> <span class=\"pre\">'first_name',</span> <span class=\"pre\">'last</span> <span class=\"pre\">_name',</span> <span class=\"pre\">'r-phost'</span></code>. Déantar neamhaird ar thréithe nach bhfuil ann.</p>\n<p>Is féidir an cosúlacht uasta ceadaithe de phasfhocail a shocrú ar scála 0.1 go 1.0 leis an bparaiméadar <code class=\"docutils literal notranslate\"><span class=\"pre\">max_similarity</span></code>. Déantar é seo i gcomparáid leis an toradh ar:meth: Difflib.sequencematcher.quick_ratio. Diúltaíonn luach 0.1 do phasfhocail mura bhfuil siad difriúil go suntasach ón <code class=\"docutils literal notranslate\"><span class=\"pre\">user_attributes</span></code>, ach ní dhiúltaíonn luach 1.0 ach pasfhocail atá comhionann le luach tréithe.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.UserAttributeSimilarityValidator.get_error_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_error_message</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.UserAttributeSimilarityValidator.get_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>A hook for customizing the <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> error message. Defaults\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;The</span> <span class=\"pre\">password</span> <span class=\"pre\">is</span> <span class=\"pre\">too</span> <span class=\"pre\">similar</span> <span class=\"pre\">to</span> <span class=\"pre\">the</span> <span class=\"pre\">&lt;user_attribute&gt;.&quot;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.UserAttributeSimilarityValidator.get_help_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_help_text</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.UserAttributeSimilarityValidator.get_help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A hook for customizing the validator's help text. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Your</span>\n<span class=\"pre\">password</span> <span class=\"pre\">can’t</span> <span class=\"pre\">be</span> <span class=\"pre\">too</span> <span class=\"pre\">similar</span> <span class=\"pre\">to</span> <span class=\"pre\">your</span> <span class=\"pre\">other</span> <span class=\"pre\">personal</span> <span class=\"pre\">information.&quot;</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.CommonPasswordValidator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">CommonPasswordValidator</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_list_path</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_PASSWORD_LIST_PATH</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.CommonPasswordValidator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bailíonn sé nach pasfhocal coitianta é an pasfhocal. &lt; <a class=\"reference external\" href=\"https://gist.github.com/roycewilliams/226886fd01572964e1431ac8afc999ce\">https://gist.github.com/roycewilliams/226886fd01572964e1431ac8afc999ce</a>&gt;Athraíonn sé seo an pasfhocal go litreacha beaga (chun comparáid cás-neamh-íogair a dhéanamh) agus seiceálann sé é i gcoinne liosta de 20,000 pasfhocal coitianta a chruthaigh <a class=\"reference internal\" href=\"#royce-williams\">Royce Williams</a>.</p>\n<p>Is féidir an password_list_path` a shocrú go cosán comhad saincheaptha de phasfhocail choitianta. Ba chóir go mbeadh pasfhocal beaga amháin in aghaidh an líne sa chomhad seo agus d'fhéadfadh sé go mbeadh sé téacs simplí nó gzipped.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.CommonPasswordValidator.get_error_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_error_message</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.CommonPasswordValidator.get_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>A hook for customizing the <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> error message. Defaults\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;This</span> <span class=\"pre\">password</span> <span class=\"pre\">is</span> <span class=\"pre\">too</span> <span class=\"pre\">common.&quot;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.CommonPasswordValidator.get_help_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_help_text</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.CommonPasswordValidator.get_help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A hook for customizing the validator's help text. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Your</span>\n<span class=\"pre\">password</span> <span class=\"pre\">can’t</span> <span class=\"pre\">be</span> <span class=\"pre\">a</span> <span class=\"pre\">commonly</span> <span class=\"pre\">used</span> <span class=\"pre\">password.&quot;</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.NumericPasswordValidator\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">NumericPasswordValidator</span></span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.NumericPasswordValidator\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bailíochtaigh nach bhfuil an pasfhocal uimhriúil go hiomlán.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.NumericPasswordValidator.get_error_message\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_error_message</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.NumericPasswordValidator.get_error_message\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><aside class=\"version-note version-added\" data-version=\"5.2\">\n<p class=\"version-note-title\">New in Django 5.2</p></aside>\n<p>A hook for customizing the <code class=\"docutils literal notranslate\"><span class=\"pre\">ValidationError</span></code> error message. Defaults\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;This</span> <span class=\"pre\">password</span> <span class=\"pre\">is</span> <span class=\"pre\">entirely</span> <span class=\"pre\">numeric.&quot;</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.NumericPasswordValidator.get_help_text\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_help_text</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.NumericPasswordValidator.get_help_text\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>A hook for customizing the validator's help text. Defaults to <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;Your</span>\n<span class=\"pre\">password</span> <span class=\"pre\">can’t</span> <span class=\"pre\">be</span> <span class=\"pre\">entirely</span> <span class=\"pre\">numeric.&quot;</span></code>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"integrating-validation\">\n<h3>Bailíochtú a chomhth<a class=\"heading-anchor\" href=\"#integrating-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Tá cúpla feidhm i <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.auth.password_validation</span></code> ar féidir leat glaoch a ghlaoch ó d'fhoirmeacha féin nó ó chód eile chun bailíochtú pasfhocal a chomhtháthú. Is féidir leis seo a bheith úsáideach má úsáideann tú foirmeacha saincheaptha le haghaidh socrú pasfhocal, nó má tá glaonna API agat a cheadaíonn pasfhocail a shocrú, mar shampla.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.validate_password\">\n<span class=\"sig-name descname\"><span class=\"pre\">validate_password</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_validators</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.validate_password\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bailíonn sé pasfhocal. Má aimsíonn gach bailíochtóir an pasfhocal bailí, filleann sé <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>. Má dhiúltaíonn bailíochtóirí amháin nó níos mó don phasfhocal, ardaíonn sé a:exc: ~django.core.exceptions.validationError leis na teachtaireachtaí earráide go léir ó na bailíochtóirí.</p>\n<p>Tá an réad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>roghnach: mura gcuirtear ar fáil é, b'fhéidir nach mbeidh roinnt bailíochtóirí in ann aon bhailíochtú a dhéanamh agus glacfaidh siad le haon phasfhocal.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.password_changed\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_changed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_validators</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.password_changed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Cuireann gach bailíochtóir ar an eolas go bhfuil an pasfhocal athraithe. Is féidir le bailíochtóirí mar cheann a chuireann cosc ar athúsáid pasfhocal é seo a úsáid. Ba chóir é seo a ghlaoch nuair a athraítear an pasfhocal go rathúil.</p>\n<p>Maidir le fo-aicmí de:class: ~Django.Contrib.Auth.Models.AbstractBaseUser, marcálfar an réimse pasfhocal mar “salach” agus tú ag glao:meth: ~django.contrib.auth.models.abstractBaseUser.set_password a spreagann glao ar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>password_modified () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>tar éis an úsáideoir a shábháil.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.password_validators_help_texts\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_validators_help_texts</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_validators</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.password_validators_help_texts\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé liosta de théacsanna cabhrach na mbailíochtóirí go léir ar ais. Míníonn siad seo na riachtanais phasfhocal don úsáideoir.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.password_validators_help_text_html\">\n<span class=\"sig-name descname\"><span class=\"pre\">password_validators_help_text_html</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">password_validators</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.password_validators_help_text_html\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann teaghrán HTML ar ais le gach téacs cabhrach i &lt;ul&gt;```. Tá sé seo cabhrach agus bailíochtú pasfhocal á chur le foirmeacha, mar is féidir leat an t-aschur a chur go díreach chuig paraiméadar <code class=\"docutils literal notranslate\"><span class=\"pre\">help_text</span></code> réimse foirme.</p>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.auth.password_validation.get_password_validators\">\n<span class=\"sig-name descname\"><span class=\"pre\">get_password_validators</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">validator_config</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.auth.password_validation.get_password_validators\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Tugann sé tacar rudaí bailíochtaithe ar ais bunaithe ar an bparaiméadar <code class=\"docutils literal notranslate\"><span class=\"pre\">validator_config</span></code>. De réir réamhshocraithe, úsáideann gach feidhm na bailíochtóirí atá sainmhínithe in:setting: AUTH_PASSWORD_VALIDATORS, ach tríd an bhfeidhm seo a ghlaoch le tacar malartach bailíochtóirí agus ansin an toradh a chur isteach i bparaiméadar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>password_validators <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>na feidhmeanna eile, úsáidfear do shraith saincheaptha bailíochtóirí ina ionad. Tá sé seo úsáideach nuair a bhíonn tipiciúil tacar bailíochtóirí agat le húsáid don chuid is mó de na cásanna, ach tá cás speisialta agat freisin a éilíonn tacar saincheaptha. Má úsáideann tú an tacar bailíochtóirí céanna i gcónaí, ní gá an fheidhm seo a úsáid, mar úsáidtear an chumraíocht ó:setting: AUTH_PASSWORD_VALIDATORS de réir réamhshocraithe.</p>\n<p>Tá struchtúr <code class=\"docutils literal notranslate\"><span class=\"pre\">validator_config</span></code> comhionann leis an struchtúr de:setting: AUTH_PASSWORD_VALIDATORS. Is féidir luach tuairisceáin na feidhme seo a chur isteach i bparaiméadar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>password_validators <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>de na feidhmeanna atá liostaithe thuas.</p>\n</dd></dl>\n\n<p>Tabhair faoi deara, nuair a chuirtear an focal faire chuig ceann de na feidhmeanna seo, ba cheart gurb é seo an pasfhocal téacs soiléir i gcónaí - ní pasfhocal hashed.</p>\n</section>\n<section id=\"writing-your-own-validator\">\n<h3>Do bhailíochtóir féin a scríobh<a class=\"heading-anchor\" href=\"#writing-your-own-validator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Mura leor bailíochtóirí ionsuite Django, is féidir leat do bhailíochtóirí pasfhocal féin a scríobh. Tá comhéadan measartha beag ag bailíochtóirí. Ní mór dóibh dhá mhodh a chur chun feidhme:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">bailíochtú</span> <span class=\"pre\">(féin,</span> <span class=\"pre\">pasfhocal,</span> <span class=\"pre\">úsáideoir</span> <span class=\"pre\">=</span> <span class=\"pre\">níl</span> <span class=\"pre\">aon</span> <span class=\"pre\">duine)</span> <span class=\"pre\">``:</span> <span class=\"pre\">bailíochtú</span> <span class=\"pre\">pasfhocal.</span> <span class=\"pre\">Cuir</span> <span class=\"pre\">ar</span> <span class=\"pre\">ais</span> <span class=\"pre\">``None</span></code> má tá an pasfhocal bailí, nó ardaigh a:exc: ~django.core.exceptions.validationError le teachtaireacht earráide mura bhfuil an pasfhocal bailí. Caithfidh tú a bheith in ann déileáil le <code class=\"docutils literal notranslate\"><span class=\"pre\">`úsáideoir</span> <span class=\"pre\">```None</span></code> - más ciallaíonn sé sin nach féidir le do bhailíochtóir rith, filleadh <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> ar ais gan aon earráid.</p></li>\n<li><p><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>get_help_text () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>: téacs cabhrach a sholáthar chun na riachtanais a mhíniú don úsáideoir.</p></li>\n</ul>\n<p>Cuirfear aon earraí sa OPTIONS` in:setting: AUTH_PASSWORD_VALIDATORS do bhailíochtaitheoir chuig an tógálaí. Ba chóir go mbeadh luach réamhshocraithe ag gach argóint tógá</p>\n<p>Seo sampla bunúsach de bhailíochtóir, le socrú roghnach amháin:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.exceptions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ValidationError</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.translation</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">gettext</span> <span class=\"k\">as</span> <span class=\"n\">_</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MinimumLengthValidator</span><span class=\"p\">:</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">min_length</span><span class=\"o\">=</span><span class=\"mi\">8</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_length</span> <span class=\"o\">=</span> <span class=\"n\">min_length</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">validate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">password</span><span class=\"p\">)</span> <span class=\"o\">&lt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_length</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">ValidationError</span><span class=\"p\">(</span>\n                <span class=\"n\">_</span><span class=\"p\">(</span><span class=\"s2\">&quot;This password must contain at least </span><span class=\"si\">%(min_length)d</span><span class=\"s2\"> characters.&quot;</span><span class=\"p\">),</span>\n                <span class=\"n\">code</span><span class=\"o\">=</span><span class=\"s2\">&quot;password_too_short&quot;</span><span class=\"p\">,</span>\n                <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;min_length&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_length</span><span class=\"p\">},</span>\n            <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">get_help_text</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;Your password must contain at least </span><span class=\"si\">%(min_length)d</span><span class=\"s2\"> characters.&quot;</span>\n            <span class=\"o\">%</span> <span class=\"p\">{</span><span class=\"s2\">&quot;min_length&quot;</span><span class=\"p\">:</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">min_length</span><span class=\"p\">}</span>\n        <span class=\"p\">)</span>\n</code></pre></div>\n<p>Is féidir leat <code class=\"docutils literal notranslate\"><span class=\"pre\">password_changes</span> <span class=\"pre\">(password,</span> <span class=\"pre\">user=none</span></code>) a chur i bhfeidhm freisin, a ghlaofar tar éis athrú pasfhocal rathúil. Is féidir é sin a úsáid chun athúsáid pasfhocal a chosc, mar shampla. Mar sin féin, má shocraíonn tú pasfhocail úsáideora roimhe seo a stóráil, níor cheart duit é sin a dhéanamh riamh i dtéacs soiléir.</p>\n</section>\n</section>","rootId":"password-management-in-django","toc":[{"title":"Conas a stórálann Django pasfhocail","anchor":"how-django-stores-passwords","children":[{"title":"Ag baint úsáide as Argon2 le Django","anchor":"using-argon2-with-django","children":[]},{"title":"Ag baint úsáide as bcrypt le Django","anchor":"using-bcrypt-with-django","children":[]},{"title":"Ag baint úsáide as scrypt le Django","anchor":"using-scrypt-with-django","children":[]},{"title":"An t-entróp salainn a mhéadú","anchor":"increasing-the-salt-entropy","children":[]},{"title":"An fachtóir oibre a mhéadú","anchor":"increasing-the-work-factor","children":[{"title":"PBKDF2 agus bcrypt","anchor":"pbkdf2-and-bcrypt","children":[]},{"title":"Argon2","anchor":"argon2","children":[]},{"title":"scrípt","anchor":"scrypt","children":[]}]},{"title":"Uasghrádú Pasfho","anchor":"password-upgrading","children":[]},{"title":"Uasghrádú pasfhocal gan logáil isteach a dhéanamh","anchor":"password-upgrading-without-requiring-a-login","children":[]},{"title":"Hashers san áireamh","anchor":"included-hashers","children":[]},{"title":"Do hasher féin a scríobh","anchor":"writing-your-own-hasher","children":[]}]},{"title":"Pasfhocal úsáideora a bhainistiú de láimh","anchor":"module-django.contrib.auth.hashers","children":[]},{"title":"Bailíochtú pasfhocal","anchor":"module-django.contrib.auth.password_validation","children":[{"title":"Cumasú bailíochtú pasfhocal","anchor":"enabling-password-validation","children":[]},{"title":"Bailíochtóirí san áireamh","anchor":"included-validators","children":[]},{"title":"Bailíochtú a chomhth","anchor":"integrating-validation","children":[]},{"title":"Do bhailíochtóir féin a scríobh","anchor":"writing-your-own-validator","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/5.2/topics/"},{"docname":"topics/auth/index","title":"Fíordheimhniú úsáideora i Django","url":"/ga/5.2/topics/auth/"}],"prev":{"docname":"topics/auth/default","title":"Córas fíordheimhnithe Django a úsáid","url":"/ga/5.2/topics/auth/default/"},"next":{"docname":"topics/auth/customizing","title":"Fíordheimhniú a shaincheapadh i Django","url":"/ga/5.2/topics/auth/customizing/"},"formats":{"html":"/ga/5.2/topics/auth/passwords/","markdown":"/ga/5.2/topics/auth/passwords.md","json":"/ga/5.2/topics/auth/passwords.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/topics/auth/passwords.txt","official":"https://docs.djangoproject.com/ga/5.2/topics/auth/passwords/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}