ピーカン晴れの,典型的な太平洋側における冬の天気。これで遠州名物の空っ風が吹けば文句なしなのだが。過ごしやすいのは結構だが,暖冬のあとに冷夏,では農作物に影響が及んでいやんなことになる。そうならないことを願うばかり。
昨日のマンション購入希望の件。予備知識は藤田香織や内田春菊や伊藤理佐(文庫版1, 2)の本で仕入れていたが,実体験は初体験なので(変な日本語だ),親切そうな販売会社の人相手にいろいろと質問しまくったのであった。
その足で,銀行のローンセンターへ行き,果たしてどんくらいの借金をワシは背負うのか,毎月の支払額はどんくらいになるのかを聞きに行く。融資希望額を言うと,「全く問題ありません」と鼻で笑われてしまった。悪かったな,無借金人生を手堅く歩みたかったワシにとってはこんな額でも相当の決心が要るのだよ。
結果,管理費込みで,この辺で少しマシなアパートを借りるよりプラス1~2万ぐらいっかなー,ということになったので,一気に購入が現実味を帯びてきた。しかし,競争が発生してしまうと,「この話はなかったことに」ということも十分あり得る。ま,待つしかないわな。
職場に顔を出して,卒論に精を出していたH君に声をかけて帰宅し,ちょろっとOpenGLでお絵かきしてみることにする。
これをキチンと動作させ,デモに使えるようになれば御の字なのだが。
本日も頑張ります。
ただいま。
GMPの整数関数を使って,RSA暗号プログラムを書いてみた。まあ世界中で探せばいろんな人が実装しているけど,日本人は最低でもJIS X 201には対応しないと話にならないので,そこだけは気をつけて作ってみた,というぐらいの特徴はある。
$ ./a.out
Input a string: !"#$%&'()=~|QWERTYUIOP`{ASDFGHJKL+*}
ZXCVBNM<>?__qwertyuiop@[asdfgh
jkl;:]zxcvbnm,./\1234567890000000-^\
string(102) -> 1576730462947408527
09022093559278712064838218691895
52242415745264542643084480974398
07351339589816136896322939633066
19325251135827032019445152361118
60590213216325790257451296396236
33302328564076347901952587916253
20338508905676169918609841799242
273
Public_key_n : 16292767024980618209
79439245801447003004820011798978
36453784528148994577951048945004
29555617860657101863594179345702
13729070482358427676585291455491
34223200414232751678915884927422
65409706960258329496961518726909
47769214623897785664603393119500
85792351580052035953898442018964
05533061264458105485777618374802
00267864642992367070000666261570
32951251703407909819090012343507
20735313582239271508225766363467
96155779679270985142232355589633
14675681664961742215411915435466
1787860612608597985675718989
Public_key_e : 11 (ワザと短くしているのよ,これ)
Private_key_d: 14811606386346016554
35853859819497275458927283453616
69503440480135449616319135404549
35959652600597365330540163041547
39753700438507661524168446777719
40202909467484319708105349934020
59463369963871208633601380660826
79790195112634350604184902835909
87076617018256132020217945534339
83660050447714932530247766875559
85921278463999840437347754429984
84629664358394962634355548082408
23000826947890992199362276495046
62334303237382134175911209554918
78731618551785901894723194639827
461969237661850816769424951
Encryption : 84582317506138963310
22162431356775680912231730901404
18197868721221792321206244253173
75126049502442638126868221361702
02906463660554638840303523189226
73134435495330844636657151620005
41799836305520465167540868844381
37413626347880882410428331633210
81052809747751725978321440039968
84334222767674677174326335614015
77497285396185049078405259619601
58397434620215653841442581831799
98792048487709690748039875878756
79351215592373759720324834728198
89798471838891068624721734504411
199117552815856583000948873
Decode : 157673046294740852709
02209355927871206483821869189552
24241574526454264308448097439807
35133958981613689632293963306619
32525113582703201944515236111860
59021321632579025745129639623633
30232856407634790195258791625320
338508905676169918609841799242273
(略)
-> !"#$%&'()=~|QWERTYUIOP`{ASDFGHJKL+*}
ZXCVBNM<>?__qwertyuiop@[asdfgh
jkl;:]zxcvbnm,./\1234567890000000-^\(102)
・・・とまあ,キーボード上の全ての文字もきちんとencrypt & decodeできる,と。これを任意の文字コードでオッケーにした上で,環境ごとに自動チューニングして高速化を図る,というところまで行けば,卒研としてはまあまあかな。
しかし,mpz関数群って,暗号化のためにできたよーなもんだよな。一番面倒なのは文字列のencode部分で,暗号化&復号化の部分なんて
/* Encrypt */
void encrypt(mpz_t enc_str_int, mpz_t str_int, mpz_t public_key_n, mpz_t public_key_e)
{
/* enc_str_int = str_int^public_key_e mod public_key_n */
mpz_powm(enc_str_int, str_int, public_key_e, public_key_n);
}
/* Decode */
void decode(mpz_t str_int, mpz_t enc_str_int, mpz_t private_key, mpz_t public_key_n)
{
/* str_int = enc_str_int^private_key mod public_key_n */
mpz_powm(str_int, enc_str_int, private_key, public_key_n);
}
・・・って,関数一つ呼び出しておしまいだもんな。ほーんと,楽チンだわ。
寝ます。