2015年6月6日土曜日

はてなブログで、なぞなぞ認証を使わずに自作認証を作ってみた。

前回、とある記事を諸事情により封印しましたが、どのように封印したのかを書きます。

この記事は、はてなブログのなぞなぞ認証なんか小賢しい!おれはScripterなんじゃぁ~~っていう人の為の記事です。

使ったのはcrypto-jsです。

https://code.google.com/p/crypto-js/

まずAESを使ってみ見ましょう!
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script>
    var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");

    var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
</script>

この様な例がサイトに載ってるので試してみると以下のようになります。

encrypted : U2FsdGVkX1/d3Ckqr3i8pQfWWRvGK8Bmw1klUiIB77Y=

decrypted : 4d657373616765

あれ?メッセージが元に戻ってない!と思うかも知れませんが、これはHEXなので以下のコードを足します。

var message = decrypted.toString(CryptoJS.enc.Utf8);

すると暗号化したメッセージが解読できます。

封印した記事は、ユーザーにパスワードを入れてもらい、解読するという単純なものになっていましたが、今回はもう少し面白く作りましょう!

SHA-3を使ってみます。
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js"></script>
<script>
    var hash = CryptoJS.SHA3("avaya");
</script>

すると以下のようなHashが出てきます。

a2f20fe2d815e7ea33ec08a6be6171d8f3e8ba3b85ad6e89b4a1c93ae2892dd60b2a625bb4cec99d8aec68299aadb49d7b07e4837ca4a65554aaa730a0fe80f6

これをパスワード認証に使います。

更に何回もパスワードを入れるのが面倒なので、認証に成功したら、パスワードをLocalStorageに保存します。

出来たコードは以下です。

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js"></script>
<div id=test></div>
<script>
var key = localStorage.getItem("key");
if(key==null){
var key = prompt("Decrypt");
}

var hash = CryptoJS.SHA3(key);

if( hash == "a2f20fe2d815e7ea33ec08a6be6171d8f3e8ba3b85ad6e89b4a1c93ae2892dd60b2a625bb4cec99d8aec68299aadb49d7b07e4837ca4a65554aaa730a0fe80f6"){

var encrypted = "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";

var decrypted = CryptoJS.AES.decrypt(encrypted, key);
document.getElementById("test").innerHTML = decrypted.toString(CryptoJS.enc.Utf8);
localStorage.setItem("key", key);
}else{
document.getElementById("test").innerHTML = "<h1>パスワードが違います。</h1>"
}
</script>

馬鹿でかい文字列が投稿のHTMLをそのまま暗号化したものです。アホかw

以下が実際の投稿です。

http://shhnjk.hatenablog.com/entry/2015/06/06/071735

パスワードはavayaです。

正しいパスワードを入れるとLocalStorageを消さない限りもう一度パスワードを求められることはありません。もしもう一度パスワード入力画面を見たい場合は以下のようにResouceからLocalStorageに行き、keyを右クリックしてDeleteを押しましょう。



何かの参考になればとてもうれしいです。See you!

0 件のコメント:

コメントを投稿