{"id":137,"date":"2024-05-08T15:52:25","date_gmt":"2024-05-08T06:52:25","guid":{"rendered":"https:\/\/dsk-blog.com\/?p=137"},"modified":"2024-05-08T15:54:05","modified_gmt":"2024-05-08T06:54:05","slug":"rust%e3%81%a7argon2%e3%81%ae%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0%e3%82%92%e6%89%b1%e3%81%86argon2%e3%82%af%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf","status":"publish","type":"post","link":"https:\/\/dsk-blog.com\/?p=137","title":{"rendered":"Rust\u3067Argon2\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u6271\u3046argon2\u30af\u30ec\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u307f\u308b"},"content":{"rendered":"\n<h3 class=\"wp-block-heading jinr-heading d--bold\">Argon2\u3068\u306f\uff1f<\/h3>\n\n\n\n<p>Argon2\u306f\u30012015\u5e74\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30f3\u30b0\u30b3\u30f3\u30da\u30c6\u30a3\u30b7\u30e7\u30f3\u3067\u512a\u52dd\u3057\u305f\u3001\u73fe\u5728\u6700\u3082\u63a8\u5968\u3055\u308c\u3066\u3044\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e00\u3064\u3067\u3059\u3002\u3053\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u306f\u3001\u8010\u30e1\u30e2\u30ea\u653b\u6483\u3001\u8010\u30b5\u30a4\u30c9\u30c1\u30e3\u30cd\u30eb\u653b\u6483\u306e\u7279\u6027\u3092\u5099\u3048\u305f\u8907\u6570\u306e\u30d0\u30ea\u30a8\u30fc\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"jinr-list wp-block-list\">\n<li><strong>Argon2d<\/strong>: GPU\u653b\u6483\u306b\u5bfe\u3057\u3066\u5f37\u3044\u304c\u3001\u30b5\u30a4\u30c9\u30c1\u30e3\u30cd\u30eb\u653b\u6483\u306b\u306f\u8106\u5f31\u3002<\/li>\n\n\n\n<li><strong>Argon2i<\/strong>: \u30b5\u30a4\u30c9\u30c1\u30e3\u30cd\u30eb\u653b\u6483\u306b\u5f37\u3044\u8a2d\u8a08\u3002<\/li>\n\n\n\n<li><strong>Argon2id<\/strong>: \u4e0a\u8a18\u4e8c\u3064\u306e\u826f\u3044\u7279\u6027\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u3082\u306e\u3067\u3001\u4e00\u822c\u7684\u306a\u7528\u9014\u306b\u6700\u3082\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading jinr-heading d--bold\">Rust\u3067\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>Argon2\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092Rust\u3067\u5b9f\u88c5\u3059\u308b\u306b\u306f\u3001<code>argon2<\/code> \u30af\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u57fa\u672c\u7684\u306a\u4f7f\u7528\u4f8b\u3067\u3059\uff1a<\/p>\n\n\n\n<p><strong>Cargo.toml\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Monaspace-Xenon.woff\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Monaspace-Xenon,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Rust<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"[dependencies]\nargon2 = &quot;0.5.3&quot;\npassword-hash = { version = &quot;0.5.0&quot;, features = [&quot;getrandom&quot;] }\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">[<\/span><span style=\"color: #9CDCFE\">dependencies<\/span><span style=\"color: #D4D4D4\">]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">argon2<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;0.5.3&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">password<\/span><span style=\"color: #D4D4D4\">-<\/span><span style=\"color: #9CDCFE\">hash<\/span><span style=\"color: #D4D4D4\"> = { <\/span><span style=\"color: #9CDCFE\">version<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;0.5.0&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">features<\/span><span style=\"color: #D4D4D4\"> = [<\/span><span style=\"color: #CE9178\">&quot;getrandom&quot;<\/span><span style=\"color: #D4D4D4\">] }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>argon2\u30af\u30ec\u30fc\u30c8\u306fpassword-hash\u30af\u30ec\u30fc\u30c8\u3092Re-export\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Monaspace-Xenon.woff\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Monaspace-Xenon,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Rust<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"use argon2::password_hash::{\n    rand_core::OsRng,\n    PasswordHash,\n    PasswordHasher,\n    PasswordVerifier,\n    SaltString,\n};\nuse argon2::Argon2;\n\nfn main() {\n    let password = b&quot;secret_password&quot;;\n    let salt = SaltString::generate( &amp;mut OsRng);\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u521d\u671f\u5316\n    let argon2 = Argon2::default();\n    \n    \/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30cf\u30c3\u30b7\u30e5\u5316\u3059\u308b\n    let password_hash = argon2.hash_password(password, &amp;salt)\n        .unwrap()\n        .to_string();\n\n    \/\/ \u30cf\u30c3\u30b7\u30e5\u3092\u691c\u8a3c\n    let parsed_hash = PasswordHash::new(&amp;password_hash)\n        .unwrap();\n    let result = argon2\n        .verify_password(password, &amp;parsed_hash)\n        .is_ok();\n    \n    println!(&quot;password_hash = {}&quot;, password_hash);\n    println!(&quot;parsed_hash = {:?}&quot;, parsed_hash);\n    println!(&quot;result = {}&quot;, result);\n}\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">use<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">argon2<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">password_hash<\/span><span style=\"color: #D4D4D4\">::{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">rand_core<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">OsRng<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">PasswordHash<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">PasswordHasher<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">PasswordVerifier<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">SaltString<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">};<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">use<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">argon2<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">Argon2<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">fn<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">main<\/span><span style=\"color: #D4D4D4\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">password<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">b&quot;secret_password&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">salt<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #4EC9B0\">SaltString<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">generate<\/span><span style=\"color: #D4D4D4\">( &amp;<\/span><span style=\"color: #569CD6\">mut<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">OsRng<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u521d\u671f\u5316<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">argon2<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #4EC9B0\">Argon2<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">default<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30cf\u30c3\u30b7\u30e5\u5316\u3059\u308b<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">password_hash<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">argon2<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">hash_password<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">password<\/span><span style=\"color: #D4D4D4\">, &amp;<\/span><span style=\"color: #9CDCFE\">salt<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">unwrap<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">to_string<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ \u30cf\u30c3\u30b7\u30e5\u3092\u691c\u8a3c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">parsed_hash<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #4EC9B0\">PasswordHash<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">new<\/span><span style=\"color: #D4D4D4\">(&amp;<\/span><span style=\"color: #9CDCFE\">password_hash<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">unwrap<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">let<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #9CDCFE\">argon2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">verify_password<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">password<\/span><span style=\"color: #D4D4D4\">, &amp;<\/span><span style=\"color: #9CDCFE\">parsed_hash<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">is_ok<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">println!<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;password_hash = {}&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">password_hash<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">println!<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;parsed_hash = {:?}&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">parsed_hash<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #DCDCAA\">println!<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;result = {}&quot;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">result<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><code>Argon2::default()<\/code>\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f<br>Algorithm\u306fOWASP\u306b\u3088\u3063\u3066\u3082\u63a8\u5968\u3055\u308c\u308bArgon2id\u3092\u4f7f\u7528\u3057\u3001<br>Version\u306fV0x13\uff08\u30d0\u30fc\u30b8\u30e7\u30f319\uff09\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3001<br>Params\u306fargon2\u30af\u30ec\u30fc\u30c8\u304c\u63a8\u5968\u3059\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u3002<\/p>\n\n\n\n<p><strong>\u51fa\u529b\u7d50\u679c<\/strong><\/p>\n\n\n\n<p>\u30cf\u30c3\u30b7\u30e5\u5316\u3055\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Monaspace-Xenon.woff\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Monaspace-Xenon,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"password_hash = $argon2id$v=19$m=19456,t=2,p=1$fwaOLxRginmaeJBKnTJ0vQ$NOfhTji56BtWSCwF8esr5b\/vqcTEBM2COtUd0RW+wNY\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">password_hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">=<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">$argon2id$v<\/span><span style=\"color: #CE9178\">=<\/span><span style=\"color: #B5CEA8\">19<\/span><span style=\"color: #9CDCFE\">$m<\/span><span style=\"color: #CE9178\">=<\/span><span style=\"color: #B5CEA8\">19456<\/span><span style=\"color: #CE9178\">,t=<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #CE9178\">,p=<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #9CDCFE\">$fwaOLxRginmaeJBKnTJ0vQ$NOfhTji56BtWSCwF8esr5b<\/span><span style=\"color: #CE9178\">\/vqcTEBM2COtUd0RW+wNY<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>parsed_hash\u306e\u5024\u306f\u3053\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<br>\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30e5\u3068\u30bd\u30eb\u30c8\u306e\u5024\u3001\u305d\u3057\u3066\u305d\u308c\u304c\u3069\u306e\u3088\u3046\u306b\u69cb\u6210\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u691c\u8a3c\u30d7\u30ed\u30bb\u30b9\u3067\u6b63\u78ba\u306b\u6bd4\u8f03\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Monaspace-Xenon.woff\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Monaspace-Xenon,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"parsed_hash = PasswordHash { \n\talgorithm: Ident(&quot;argon2id&quot;), \n\tversion: Some(19), \n\tparams: {\n\t\tIdent(&quot;m&quot;): Value(&quot;19456&quot;), \n\t\tIdent(&quot;t&quot;): Value(&quot;2&quot;), \n\t\tIdent(&quot;p&quot;): Value(&quot;1&quot;)\n\t}, \n\tsalt: Some(\n\t\tSalt(&quot;fwaOLxRginmaeJBKnTJ0vQ&quot;)\n\t), \n\thash: Some(\n\t\tOutput(&quot;NOfhTji56BtWSCwF8esr5b\/vqcTEBM2COtUd0RW+wNY&quot;)\n\t) \n}\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">parsed_hash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">=<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">PasswordHash<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">{<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #DCDCAA\">algorithm:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Ident<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">&quot;argon2id&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><span style=\"color: #CE9178\">,<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #DCDCAA\">version:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Some<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">19<\/span><span style=\"color: #D4D4D4\">)<\/span><span style=\"color: #CE9178\">,<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #DCDCAA\">params:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #DCDCAA\">Ident(<\/span><span style=\"color: #DCDCAA\">&quot;m&quot;<\/span><span style=\"color: #D4D4D4\">): Value(<\/span><span style=\"color: #DCDCAA\">&quot;19456&quot;<\/span><span style=\"color: #D4D4D4\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #DCDCAA\">Ident(<\/span><span style=\"color: #DCDCAA\">&quot;t&quot;<\/span><span style=\"color: #D4D4D4\">): Value(<\/span><span style=\"color: #DCDCAA\">&quot;2&quot;<\/span><span style=\"color: #D4D4D4\">), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #DCDCAA\">Ident(<\/span><span style=\"color: #DCDCAA\">&quot;p&quot;<\/span><span style=\"color: #D4D4D4\">): Value(<\/span><span style=\"color: #DCDCAA\">&quot;1&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t}, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #DCDCAA\">salt:<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">Some<\/span><span style=\"color: #D4D4D4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #DCDCAA\">Salt(<\/span><span style=\"color: #DCDCAA\">&quot;fwaOLxRginmaeJBKnTJ0vQ&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #DCDCAA\">hash<\/span><span style=\"color: #D4D4D4\">: <\/span><span style=\"color: #CE9178\">Some<\/span><span style=\"color: #D4D4D4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #DCDCAA\">Output(<\/span><span style=\"color: #DCDCAA\">&quot;NOfhTji56BtWSCwF8esr5b\/vqcTEBM2COtUd0RW+wNY&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u691c\u8a3c\u7d50\u679c<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-Monaspace-Xenon.woff\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Monaspace-Xenon,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"result = true\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">result<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">=<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">true<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><code>verify_password()<\/code> \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u3044\u304b\u3069\u3046\u304b\u3092\u691c\u8a3c\u3057\u3001\u7d50\u679c\u306f\u30d6\u30fc\u30eb\u5024\uff08<code>true<\/code>\u307e\u305f\u306f<code>false<\/code>\uff09\u3067\u8868\u793a\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p>\u4eca\u56de\u306f\u3001\u30e9\u30f3\u30c0\u30e0\u306a\u30bd\u30eb\u30c8\u3068\u5171\u306bArgon2\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u4f7f\u7528\u3057\u3066\u30cf\u30c3\u30b7\u30e5\u5316\u3057\u3001\u305d\u306e\u7d50\u679c\u3092\u691c\u8a3c\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n<section class=\"b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round \"><div class=\"a--blogcard-label ef\">\u524d\u56de\u306e\u8a18\u4e8b<\/div><a class=\"o--blogcard-link t--round\" href=\"https:\/\/dsk-blog.com\/?p=113\"><div class=\"c--blogcard-image\"><img loading=\"lazy\" decoding=\"async\" class=\"a--blogcard-img-src\" width=\"128\" height=\"72\" src=\"https:\/\/dsk-blog.com\/wp-content\/uploads\/2024\/04\/DSK-BLOG-320x180.webp\" alt=\"Rust\u3067JSON Web Tokens\uff08JWT\uff09\u3092\u6271\u3046jsonwebtoken\u30af\u30ec\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u307f\u308b \u2460\" \/><\/div><div class=\"a--blogcard-title d--bold\">Rust\u3067JSON Web Tokens\uff08JWT\uff09\u3092\u6271\u3046jsonwebtoken\u30af\u30ec\u30fc\u30c8\u3092\u4f7f\u3063\u3066\u307f\u308b \u2460<\/div><\/a><\/section>","protected":false},"excerpt":{"rendered":"<p>Argon2\u3068\u306f\uff1f Argon2\u306f\u30012015\u5e74\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30f3\u30b0\u30b3\u30f3\u30da\u30c6\u30a3\u30b7\u30e7\u30f3\u3067\u512a\u52dd\u3057\u305f\u3001\u73fe\u5728\u6700\u3082\u63a8\u5968\u3055\u308c\u3066\u3044\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30f3\u30b0\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e00\u3064\u3067\u3059\u3002\u3053\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u306f\u3001\u8010\u30e1\u30e2\u30ea\u653b\u6483\u3001\u8010\u30b5\u30a4\u30c9\u30c1\u30e3\u30cd\u30eb\u653b\u6483\u306e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":97,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jinr_url_youtube":"","_jinr_pip_youtube":false,"_jinr_time_youtube":"","_jinr_thumb_youtube":"","_jinr_media_youtube":"","_jinr_category_edit":false,"_jinr_category":"","_jinr_title_display":false,"_jinr_snsbutton_display":false,"_jinr_ads_display":false,"_jinr_thumbnail_display":false,"_jinr_profile_display":false,"_jinr_relatedpost_display":false,"_jinr_sidebar1col_display":false,"_jinr_sidebar2col_display":false,"_jinr_seotitle_display":"","_jinr_description_display":"","_jinr_keyword_display":"","_jinr_hastag_display":"","_jinr_canonical_display":"","_jinr_noindex_display":false,"_jinr_paidpost":false,"_jinr_paidpost_product_id":"","_jinr_headtag_article":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-137","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"views":"343","_links":{"self":[{"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=137"}],"version-history":[{"count":4,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/137\/revisions"}],"predecessor-version":[{"id":142,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/posts\/137\/revisions\/142"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=\/wp\/v2\/media\/97"}],"wp:attachment":[{"href":"https:\/\/dsk-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dsk-blog.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}