‘programming’ カテゴリーのアーカイブ

[RSAの勉強日記2] Javascriptで暗号化してPythonで復号したい

2012年2月4日 土曜日

先日、RSAについて解った気になったと書いたんですけど、実際はあんまり解ってなかったので補足等。やりたいのはクライアントで暗号化した情報をサーバで受けて復号したいという事ですね。

  1. 鍵の生成をサーバで行って公開鍵をJSのコードに埋める
  2. JS側で公開鍵を使って暗号化したデータをサーバに送る
  3. サーバで受け取ったデータをPythonで復号

単純な話なはずだったんですけど、上手く行かずにハマりました。

結論から書くと、PyCryptoモジュールがPKCS#1で規定されているのパディング/アンパディングに対応してなかったので自前でアンパディング処理を追加したら上手く行ったという事ですが、学習をかねてもう少し詳しく書いておきます。

(続きを読む…)

RSAの勉強日記

2012年2月2日 木曜日

Javascriptでデータ送る際にデータを暗号化したいなという事で、そうだRSAを使おうと思ったのですが、RSAについて、sshの鍵作る時に出てくる単語で暗号方式?位の理解しかなかったので少し調べてみました。

(続きを読む…)

Pythonで合同式の逆元を求める

2012年2月1日 水曜日

RSAをおさらいしていたら、合同式の逆元を求める必要がありました。合同式の逆元は拡張ユークリッドの互除法を使うと求められるのですが、逆元を求める際にどう拡張ユークリッドの互除法を使えば良いのか解らなくて、手間取ったのでメモしておきます。コードはPythonです。

一応解きたい式を書いておくと以下になります。
\mathfrak{a}x \equiv 1\ \pmod{\mathfrak{m}}

(続きを読む…)

SWI-PrologをC言語から叩く

2012年1月8日 日曜日

7つの言語 7つの世界」の3つ目の言語がPrologなんですけど、触ってみると結構面白くて、とりあえずの感想としてはルールの表現力がハンパ無く高いなという事です。良く例で挙げられていますが、数独を解いたり、麻雀の手役を確認したりといった、一定のルールに基づいた処理を他の言語と比べてかなり楽に書けそうです。

これはちょっと習得しておきたいなと思うものの、上述のような特定の処理以外は他の言語と比べてあまりに貧弱です。今回使用した処理系の標準ライブラリはこれだけしかありません。

なので必要に応じてPrologを別の言語から使うという方が現実的なのかなということで、とりあえずPythonインターフェースを試したのですが、動かなかったので仕方なしにC言語から使ってみる事にしました。なお処理系はSWI-Prologというのを使う事にしました。(手元だとGNU Prologが日本語で文字化けを起こしました。)

(続きを読む…)

OSXのdylibを作ってみる

2012年1月7日 土曜日

OSXで共有ライブラリを触ったことがなかったので、試しにdylibを作ってみました。Linuxだと.soですがOSXだと.dylibのようですね。フォーマットの差異については調べていません。Appleの「Dynamic Library Programming」というドキュメントのさわりだけ参考にしました。

(続きを読む…)

django.utils.functionalを読んだメモ

2011年12月21日 水曜日

django関連のコードを読んでいて、django.utils.functionalというモジュールが目につきました。中を見るとカリー化や遅延評価など聞いたは事あるものの、いまいちピンとこなかったので、調べた事のメモ書きを残しておきます。

(続きを読む…)

「7つの言語 7つの世界」2週目 Io

2011年12月18日 日曜日

7つの言語 7つの世界」2週目です。Ioです。2週目とか言いながら、Rubyやってから6週間も経ってしまいました。インストールが手強かったので仕方がないのです。

さて本書で、Ioは「フェリスはある朝突然に」という映画のフェリス・ビューラーという役柄に例えられています。やっぱりこの映画も見た事無いのですが、型破りで予測不可能なキャラクターの様です。

(続きを読む…)

[Iolanguage] Snow LeopardにIoをインストールする

2011年12月18日 日曜日

7つの言語 7つの世界」の2つ目の言語はIoなんですが、Snow Leopardにインストールするのに、やたらと手間取ったのでメモしておきます。

最初githubのheadをビルドして、yajlが古くてビルドできないよって怒られて、仕方が無いのでportsでインストールしようとしてもyajlがやっぱり古いなどでインストールできませんでした。結局yajlを入れ直す等してインストールできました。

(続きを読む…)

はてブの件数取得APIが改善されて欲しい件

2011年11月2日 水曜日

はてなブックマークが他のSBMと比べて優れている点の1つに、エントリ単位だけではなくて、サイト(ドメイン)単位のブックマーク数を取得するAPIも提供しているというのがあると思います。ブックマークデータを元にした集計から分かる、中長期的にパフォーマンスを発揮しているサイトを共有してくれているわけです。ソーシャルブックマークサービスの鏡です。

DeliciousもDiggもredditも、URLや話題単位のブックマーク数しか取得できないので、サイトごとのパフォーマンスを見ようとするとサイトマップからURLなめて見たいな事になって残念です。Deliciousは今すぐ同等APIを提供するべき!

まぁそれは置いといて、XML-RPCで提供されているこのAPIは、例えばPythonからだと以下の様に使えます。

import xmlrpclib
import sys
 
# このブログ全体のブックマーク数を取得する
target = 'http://taichino.com' 
api = xmlrpclib.ServerProxy('http://b.hatena.ne.jp/xmlrpc')
print api.bookmark.getTotalCount(target)

簡単ですね。素晴らしいです。ブックマークされてニヤニヤしたり、他のブログやサイトのパフォーマンスを比較したりするのが好きな僕には大変ありがたいAPIなのですが、まぁなんというかイマイチなんです。

(続きを読む…)

「7つの言語 7つの世界」1週目 Ruby

2011年10月30日 日曜日

7つの言語 7つの世界」を読み始める事にしました。

これは7つのプログラミング言語(Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell)を、それぞれ1週間ずつ7週間かけて学ぶという、なんともプログラマ心をくすぐる本です。また現状で僕が触れる言語は、C言語と似た制御構文を持っているものばかりなので、この本で取り上げられている言語をつまみ食いする事で、視野が広がったりして日々書くコードがもっと良くなったら良いなぁと思って読んでみる事にしました。

ちなみに各章は5つの節、”概要”, “1日目”, “2日目”, “3日目”, “まとめ”に分かれています。1日目〜3日目までが実際に手を動かしながら読み進める部分になっていて、練習問題がついています。学習効果が期待できそうなので練習問題の解いていく作業をまとめて行きたいと思います。

(続きを読む…)