{"id":5600,"date":"2024-05-27T12:31:12","date_gmt":"2024-05-27T03:31:12","guid":{"rendered":"https:\/\/taitan916.info\/blog\/?p=5600"},"modified":"2024-04-25T14:44:31","modified_gmt":"2024-04-25T05:44:31","slug":"post-5600","status":"publish","type":"post","link":"https:\/\/taitan916.info\/blog\/archives\/5600","title":{"rendered":"PHP\u3068Google Authenticator\u306e\u7d44\u307f\u5408\u308f\u305b\u30672\u6bb5\u968e\u8a8d\u8a3c\u3092\u5b9f\u88c5\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"<p>2\u6bb5\u968e\u8a8d\u8a3c\u3068\u8a00\u3048\u3070SMS\u9001\u4fe1\u306e\u30b1\u30fc\u30b9\u304c\u591a\u304f\u3001\u305d\u306e\u6b21\u306b\u901a\u5e38\u306e\u30e1\u30fc\u30eb\u9001\u4fe1\u3068\u3044\u3046\u30b1\u30fc\u30b9\u304c\u591a\u3044\u3088\u3046\u306b\u601d\u3046\u3002\u305f\u3060\u5076\u306bGoogle Authenticator\u3068\u3044\u3046\u30a2\u30d7\u30ea\u3092\u4f7f\u3046\u30b1\u30fc\u30b9(My Nintendo Store\u7b49)\u304c\u3042\u308a\u3001\u3053\u308c\u3092\u5b9f\u88c5\u3057\u3066\u307f\u305f\u3044\u3068\u601d\u3063\u305f\u3002\u4ee5\u4e0b\u306b\u5b9f\u88c5\u65b9\u6cd5\u3092\u30e1\u30e2\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>Google Authenticator<\/h2>\n<h3>iOS\u7248<\/h3>\n<p><a href=\"https:\/\/apps.apple.com\/jp\/app\/google-authenticator\/id388497605\" target=\"_blank\" rel=\"noopener\">https:\/\/apps.apple.com\/jp\/app\/google-authenticator\/id388497605<\/a><\/p>\n<h3>Android\u7248<\/h3>\n<p><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.apps.authenticator2&amp;hl=ja\" target=\"_blank\" rel=\"noopener\">https:\/\/play.google.com\/store\/apps\/details?id=com.google.android.apps.authenticator2&amp;hl=ja<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>GoogleAuthenticator(\u30e9\u30a4\u30d6\u30e9\u30ea)<\/h2>\n<h3>GitHub<\/h3>\n<p><a href=\"https:\/\/github.com\/PHPGangsta\/GoogleAuthenticator\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/PHPGangsta\/GoogleAuthenticator<\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n<h3>\u624b\u52d5\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n<p>Composer\u3067\u3082\u3044\u3051\u308b\u307f\u305f\u3044\u3060\u3051\u3069\u30d5\u30a1\u30a4\u30eb1\u679a\u306a\u306e\u3067\u624b\u52d5\u3067\u554f\u984c\u306a\u3057\u3002<a href=\"https:\/\/github.com\/PHPGangsta\/GoogleAuthenticator\/blob\/master\/tests\/GoogleAuthenticatorTest.php\" target=\"_blank\" rel=\"noopener\">\u3053\u3061\u3089\u306e\u30da\u30fc\u30b8<\/a>\u304b\u3089GoogleAuthenticatorTest.php\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3001\u9069\u5f53\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u5b9f\u88c5\u65b9\u6cd5<\/h2>\n<h3>\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306e\u767a\u884c<\/h3>\n<p>\u30e6\u30fc\u30b6\u60c5\u5831\u767b\u9332\u306e\u969b\u306b\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u767b\u9332\u3057\u3066\u304a\u304f\u3002\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306f\u300c<a href=\"https:\/\/ja.wikipedia.org\/wiki\/%E4%B8%89%E5%8D%81%E4%BA%8C%E9%80%B2%E6%B3%95#Base32\" target=\"_blank\" rel=\"noopener\">Base32<\/a>\u304b\u3089\u30e9\u30f3\u30c0\u30e0\u306716\u6587\u5b57\u300d\u3067\u30e6\u30fc\u30b6\u6bce\u306b\u767a\u884c\u3057\u3066\u304a\u304f\u3053\u3068\u3002<\/p>\n<p>\u5c1a\u3001\u4ee5\u4e0b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3067\u767a\u884c\u3067\u304d\u308b\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">$random = substr(str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), 0, 16);\r\necho $random; \/\/HGDOQ5MR3LCPSZTJ<\/pre>\n<h3>\u901a\u5e38\u306e\u30ed\u30b0\u30a4\u30f3\u5f8c\u306b2\u6bb5\u968e\u8a8d\u8a3c\u3092\u884c\u3046<\/h3>\n<p>ID&amp;PASS\u7b49\u3067\u901a\u5e38\u306e\u30ed\u30b0\u30a4\u30f3\u5f8c\u306b2\u6bb5\u968e\u8a8d\u8a3c\u30da\u30fc\u30b8\u306b\u9032\u3080\u3088\u3046\u306a\u5f62\u306b\u306a\u308b\u7b48\u3002\u305d\u306e2\u6bb5\u968e\u8a8d\u8a3c\u30da\u30fc\u30b8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u304c\u4ee5\u4e0b\u306b\u306a\u308b\u3002<\/p>\n<h3>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?php\r\nrequire_once 'GoogleAuthenticator.php';\r\n\r\n$auth_title = \"Google Authenticator\u306e\u30c6\u30b9\u30c8\";\r\n\r\n\/\/\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u306f\u30e6\u30fc\u30b6\u500b\u5225\u306e\u3082\u306e\u3092\u6307\u5b9a\u3059\u308b\r\n$secret = \"ABCDEFGHIJKLMNOP\";\r\n\r\n$ga = new PHPGangsta_GoogleAuthenticator();\r\n\r\n\/\/QR\u30b3\u30fc\u30c9\u306eURL\u3092\u751f\u6210\r\n$qrcode = $ga-&gt;getQRCodeGoogleUrl($auth_title, $secret);\r\n\r\n\/\/2\u6bb5\u968e\u8a8d\u8a3c\r\n$checkResult = false;\r\n$is_valid = false;\r\n$oneCode = \"\";\r\nif( isset($_POST[\"oneCode\"]) &amp;&amp; isset($_POST[\"oneCode\"]) != \"\" ){\r\n    $is_valid = true;\r\n    $oneCode = $_POST[\"oneCode\"];\r\n    $checkResult = $ga-&gt;verifyCode($secret, $oneCode, 1);\r\n}\r\n?&gt;\r\n&lt;!doctype html&gt;\r\n&lt;html lang=\"ja\"&gt;\r\n&lt;head&gt;\r\n&lt;title&gt;2\u6bb5\u968e\u8a8d\u8a3c&lt;\/title&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;?php if($is_valid){ ?&gt;\r\n        &lt;?php echo ( $checkResult ) ? '\u8a8d\u8a3c\u6210\u529f' : '\u8a8d\u8a3c\u5931\u6557';?&gt;\r\n    &lt;?php }else{ ?&gt;\r\n        &lt;img src=\"&lt;?php echo $qrcode; ?&gt;\"&gt;\r\n    &lt;?php } ?&gt;\r\n\r\n        &lt;form action=\".\/\" method=\"POST\"&gt;\r\n            &lt;input type=\"text\" name=\"oneCode\" value=\"&lt;?php echo $oneCode; ?&gt;\" maxlength=\"6\" minlength=\"6\"&gt;\r\n            &lt;button type=\"submit\"&gt;\u8a8d\u8a3c&lt;\/button&gt;\r\n        &lt;\/form&gt;\r\n\r\n        &lt;?php echo \"\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc: \".$secret.\"\\n\\n\"; ?&gt;\r\n\r\n    &lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>\u4f8b\u306e\u305f\u3081\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u56fa\u5b9a\u306b\u3057\u3066\u3044\u308b\u304c\u3001\u5b9f\u969b\u306f\u524d\u8ff0\u306e\u901a\u308a\u30e6\u30fc\u30b6\u6bce\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u3092\u6307\u5b9a\u3059\u308b\u3053\u3068\u3002<\/p>\n<h3>\u30d6\u30e9\u30a6\u30b6\u3067\u8868\u793a<\/h3>\n<p>\u524d\u8ff0\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u958b\u304f\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u8868\u793a\u3055\u308c\u308b\u7b48\u3002<\/p>\n<p><a href=\"https:\/\/taitan916.info\/blog\/wp-content\/uploads\/2024\/05\/002.jpg\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5605\" src=\"https:\/\/taitan916.info\/blog\/wp-content\/uploads\/2024\/05\/002-300x248.jpg\" alt=\"\" width=\"300\" height=\"248\" srcset=\"https:\/\/taitan916.info\/blog\/wp-content\/uploads\/2024\/05\/002-300x248.jpg 300w, https:\/\/taitan916.info\/blog\/wp-content\/uploads\/2024\/05\/002.jpg 348w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u4e0a\u8a18\u306eQR\u30b3\u30fc\u30c9\u3092Google Authenticator\u306e\u30a2\u30d7\u30ea\u304b\u3089\u958b\u304f\u30686\u6841\u306e\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u751f\u6210\u3055\u308c\u3001\u305d\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30d5\u30a9\u30fc\u30e0\u306b\u5165\u529b\u3057\u300c\u8a8d\u8a3c\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u8a8d\u8a3c\u304c\u884c\u308f\u308c\u308b\u306e\u304c\u78ba\u8a8d\u3067\u304d\u308b\u7b48\u3002<\/p>\n<h3>\u6642\u9593\u306e\u305a\u308c<\/h3>\n<p>\u300c$ga-&gt;verifyCode()\u300d\u306e\u7b2c3\u5f15\u6570\u3067\u300c30\u79d2\u5358\u4f4d\u3067\u8a31\u5bb9\u3055\u308c\u308b\u6642\u9593\u306e\u305a\u308c\u300d\u3092\u8a2d\u5b9a\u3067\u304d\u308b\u30028\u3092\u8a2d\u5b9a\u3057\u305f\u5834\u5408\u306f\u524d\u5f8c4\u5206\u305a\u308c\u3066\u3044\u3066\u3082\u8a8d\u8a3c\u6210\u529f\u3068\u306a\u308b\u3002\u5c1a\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f1\u304c\u8a2d\u5b9a\u3055\u308c\u308b\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2>\u53c2\u8003\u30b5\u30a4\u30c8<\/h2>\n<p><a href=\"https:\/\/blog.8bit.co.jp\/?p=19630\" target=\"_blank\" rel=\"noopener\">https:\/\/blog.8bit.co.jp\/?p=19630<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2\u6bb5\u968e\u8a8d\u8a3c\u3068\u8a00\u3048\u3070SMS\u9001\u4fe1\u306e\u30b1\u30fc\u30b9\u304c\u591a\u304f\u3001\u305d\u306e\u6b21\u306b\u901a\u5e38\u306e\u30e1\u30fc\u30eb\u9001\u4fe1\u3068\u3044\u3046\u30b1\u30fc\u30b9 ... <\/p>\n","protected":false},"author":1,"featured_media":5601,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2,70],"tags":[],"class_list":["post-5600","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","category-google"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/5600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/comments?post=5600"}],"version-history":[{"count":5,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/5600\/revisions"}],"predecessor-version":[{"id":5607,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/posts\/5600\/revisions\/5607"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/media\/5601"}],"wp:attachment":[{"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/media?parent=5600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/categories?post=5600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taitan916.info\/blog\/wp-json\/wp\/v2\/tags?post=5600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}