ひびろぐ ver.2

Google検索したときの見た目を考慮してブログ名を変更してみた。馬鹿かと阿呆かと。

Archive for 1月, 2008


[weblog]ダレット、「ストリートファイターオンライン マウスジェネレーション」を正式発表

ダレット、「ストリートファイターオンライン マウスジェネレーション」を正式発表



これはこれでありかもしれない。もしかしたら面白そうかも、と思った。

PHPとJSでJSONを弄っていたがうまくいかない

しばらく弄っていなかったツールを久々に弄ってみた。


よくわからないけど、PHPで暗号化したデータをJSで復号化したらゴミがつくといううぜえ罠に嵌った。

ファイル暗号化コード:

PHP:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5.  
  6. <?php
  7. define("password", "hogehoge");
  8.  
  9. $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC), MCRYPT_RAND);
  10. $cryptkey = hash("md5", password);
  11.  
  12. $checktext = "12345678";
  13. $encrypted = mcrypt_encrypt(MCRYPT_BLOWFISH, $cryptkey, $checktext, MCRYPT_MODE_CBC, $iv);
  14.  
  15. $tmparray["iv"] = base64_encode($iv);
  16. $tmparray["viewpasschecker"] = base64_encode($encrypted);
  17. $tmparray["viewpasschecker2"] = base64_encode($iv.$encrypted);
  18.  
  19. $tmpdata = json_encode($tmparray);
  20. $outname = "test.json";
  21. $F = fopen($outname, "w");
  22. flock($F, LOCK_EX);
  23. fwrite($F, $tmpdata);
  24. flock($F, LOCK_UN);
  25. fclose($F);
  26.  
  27. ?>
  28.  
  29. <p>original data:<br>
  30. <?php
  31. print_r($tmparray);
  32. ?>
  33. </p>
  34.  
  35. <br>
  36.  
  37. <p>
  38. json_encoded data:<br>
  39. <?php
  40. print_r($tmpdata);
  41. ?>
  42. </p>
  43.  
  44. </body>
  45. </html>


復号化コード1(ファイルを直接読み込み):

PHP:

  1. <?php
  2. $F = fopen("test.json", "r");
  3. $tmpdata = fread($F, filesize("test.json"));
  4. fclose($F);
  5. ?>
  6.  
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  10. <title>test</title>
  11. <script type="text/javascript" src="prototype.js"></script>
  12. <script type="text/javascript" src="md5.js"></script>
  13. <script type="text/javascript" src="base64.js"></script>
  14. <script type="text/javascript" src="blowfish.js"></script>
  15. <link rel="stylesheet" type="text/css" href="style.css">
  16. </head>
  17. <body>
  18.  
  19. <script language='javaScript'>
  20.    function hoge(){
  21.    var indata = <?=$tmpdata?>;
  22.    var data = eval(indata);
  23.  
  24.    checktext = base64.decode(data.viewpasschecker2);
  25.    cryptkey = MD5_hexhash('hogehoge');
  26.    document.getElementById("out").innerHTML += "(cryptkey:"+cryptkey+")";
  27.    document.getElementById("out").innerHTML += "(checktext:"+checktext+")";
  28.    var myHash = {
  29.    data : checktext,
  30.    key : cryptkey,
  31.    mode : "cbc",
  32.    round : 16,
  33.    pchar : "\0"
  34.    }
  35.    result = blowfish.decrypt(myHash);
  36.    document.getElementById("out").innerHTML += "(result:"+result+")";
  37.    document.getElementById("out").innerHTML += "(result:"+result.replace("\0","")+")";
  38. }
  39. </script>
  40.  
  41. <p onclick="hoge()">
  42. decode
  43. </p>
  44. <p><?=$tmpdata?></p>
  45. <p id="out">?</p>
  46.  
  47. </body>
  48. </html>


復号化コード2(Ajaxで読み込み):

PHP:

  1. <?php
  2. $F = fopen("test.json", "r");
  3. $tmpdata = fread($F, filesize("test.json"));
  4. fclose($F);
  5. ?>
  6.  
  7. <html>
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  10. <title>test</title>
  11. <script type="text/javascript" src="prototype.js"></script>
  12. <script type="text/javascript" src="md5.js"></script>
  13. <script type="text/javascript" src="base64.js"></script>
  14. <script type="text/javascript" src="blowfish.js"></script>
  15. <link rel="stylesheet" type="text/css" href="style.css">
  16. </head>
  17. <body>
  18.  
  19. <script language='javaScript'>
  20.   function hoge2(obj){
  21.   document.title = "hoge2";
  22.   alert(obj.responseText);
  23.   res = obj.responseText;
  24.   document.getElementById("out2").innerHTML = res;
  25.   //var data = eval(res);
  26.   var data = eval('('+res+')');
  27.  
  28.   checktext = base64.decode(data.viewpasschecker2);
  29.   cryptkey = MD5_hexhash('hogehoge');
  30.   document.getElementById("out").innerHTML += "(cryptkey:"+cryptkey+")";
  31.   document.getElementById("out").innerHTML += "(checktext:"+checktext+")";
  32.   var myHash = {
  33.   data : checktext,
  34.   key : cryptkey,
  35.   mode : "cbc",
  36.   round : 16,
  37.   pchar : "\0"
  38.   }
  39.   result = blowfish.decrypt(myHash);
  40.   document.getElementById("out").innerHTML += "(result:"+result+")";
  41.   document.getElementById("out").innerHTML += "(result:"+result.replace("\0","")+")";
  42. }
  43.  
  44. function hoge(){
  45.   var url = "test.json";
  46.   var pars = "";
  47.  
  48.   var myAjax = new Ajax.Request(
  49.                 url,
  50.                 {
  51.                 method: 'get',
  52.                     parameters: pars,
  53.                     onComplete: hoge2
  54.                     });
  55.  
  56. }
  57.  
  58. </script>
  59.  
  60. <p onclick="hoge()">
  61. decode
  62. </p>
  63. <p><?=$tmpdata?></p>
  64. <p id="out">?</p>
  65. <p id="out2">?</p>
  66.  
  67. </body>
  68. </html>


元データを"OK"にしたら、1ではうまく動いて2ではゴミが付いた。元データを"12345678"にしたら、両方ともゴミが付いた。


うーん。なんだろうね。


使っているjsファイルはこの辺から:

高度な JavaScript 技集

暗号化アルゴリズム Blowfish を JavaScriptで

私とWordPress

MovableTypeよりも自分にとってハックしやすい。

それでも適当に思ったことを放り投げるにはハードルがあるきがするのは何故だろう。


とかふと思った。まぁ投稿用クライアントでも用意しろってことかしら。


どうでもいいけど、結局モブログ環境を整えていないのはどうかと思うんだ。なんとかせなー。

続:GUI地獄

Frame生成時に親を教える、Show/ShowModal関数は親が呼ぶ。


後者に気がつかずにだいぶ悩んだ。何はともあれ最低限?動くものは完成。使って様子を見つつ、地味にバージョンアップを行う方向かな。一般公開はもうちょっとしてから。

久々の家探し

ついカッとなって引越しでもしようと思っている。

不動産屋行脚はめんどくさいね。まだ一軒しか逝ってないけど。

慶應って微妙に近くないんだよなぁと

ARC168EMB7

招待講演だけ聴いてみたい。二件とも微妙に面白そう。でも正直行くのがめんどくさい。研究進めなきゃだし、木金と別の研究会あるし。うーん。

SO1クリア

ようやく一周。結局24時間でクリアできなかった。恒例のアレをめぐってからネタバレサイトを見つつコンプリート(?)を狙おうと思います。


RPG史上最弱とまで呼ばれたラスボスは幾分マシになっていたが、やはりフルボッコみたいなもんだった。まぁ防具強化ちゃんとやってるし、当然か?

それよりもエンディング後に電源を落とす(PSPなのでゲームを終了するという動作になるが)以外できないというのも珍しい気がした。そうでもないか?

パスワードエラー

研究室内無線ルータのパスワードを変更したら、入れなくなった。

頭を抱えて初期化→再設定→同じトラブル


パスワード変更フォームに8文字制限があったことに気がついた。

→8文字制限だけど9文字のパスワードを入力(したつもりで実際は9文字目が切れている)

→ブラウザアクセスでBASIC認証ウィンドウが出る

→9文字パスワードを正しく入力

→うぼあ


shit!

GUI地獄

wxPythonでShowModalをすると、親FrameのMainLoopが抜けてしまって死ぬ。もうわけがわからん。せめてエラーを吐いてくれればデバッグのしがいがあるんだが。


いい加減GUIの操作に嵌る日々は脱却したいというか、この時代になってVB6の頃より直感的に組めないのは本気で嫌になるんだけど、どうにかならんのかのう。アルゴリズムが難しくてなかなか実装できないとかならまだ頑張れるんだけど、こう本質じゃない部分で進まないと本気でむかつく。


亜qwせdrftgyふじこlp;@:「」

冬のプロシン終了

ただいま。もっと早く帰ってたけど。

なんというか、やっと正月があけたというか、現実に戻ってきた気がするというか、まぁそんな感じです。プロシンはいろんな意味でとんでもない新年会だった。次回以降も是非参加したい。


というわけで、また頑張って実装なり何なりやろうと思う。明日は明日で68の新年会だけど。