送信プログラム開発にはこのテクが必要で、当方でも悪戦苦闘してクリアしました。
まあ1ケ月かかるかも、と思っていたのに3日でクリアでき、まさにネットのありがたみを痛感しました。
このテクは人が作ったものにほとんどタダ乗りしましたので、公開しておきます。
なお、RFC公開ソースを利用している旨をソースに記述せよ、とRFCの公開資料に書かれていることをお忘れなく!
[ MD5/CRAM-MD5 の原理やプログラムを垣間見たければ ]
いろいろありましたが、結局、○をつけた2つの C ソースを C++ 用にいじって使いました。
大きなバグはなく、; が1つ抜けていただけで、そこを修正すれば一発で通りました。
実際にはサーバーからBASE64変換されて送られてくる「チャレンジ文字列」にパスワードをキーにして HMAC-MD5(これがキー付きMD5) の計算をして、文字列を求めます。
こうして得られた文字列の頭にアカウントをくっつけて, BASE64変換した文字列をサーバーに送ってやれば認証は完了します。
[ 認証例 ]
[R]:220 smtp-c.stnet.ne.jp ESMTP
[S]:EHLO smtp.netwave.or.jp
[R]:250-smtp-c.stnet.ne.jp
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5
250-AUTH=LOGIN PLAIN CRAM-MD5
250 8BITMIME
[S]:AUTH CRAM-MD5
[R]:334 PDE4MTE0MDQ3MjcuMTE1OTgzOTdAc210cC1jLnN0bmV0Lm5lLmpwPg==
[M]:チャレンジ文字列 <1811404727.11598397@smtp-c.stnet.ne.jp>
[M]: ANS 合成文字列 = XXXXXXXX f25846dc7d5fc3a65775eff5809d16cd
(アカウント+ Keyed MD5 Digest)
[M]: ANS BASE64変換後 = bmFrYWk5OUBtYWlsLm5ldHdhdmUub3IuanAgZjI1ODQ2ZGM3ZDVmYzNhNjU3NzVlZmY1ODA5ZDE2Y2Q=
[S]:bmFrYWk5OUBtYWlsLm5ldHdhdmUub3IuanAgZjI1ODQ2ZGM3ZDVmYzNhNjU3NzVlZmY1ODA5ZDE2Y2Q=
[R]:235 Authentication successful
[S]:MAIL FROM: "nakai99@mail.netwave.or.jp"
[R]:250 Ok
[S]:RCPT TO: "nakai99@mail.netwave.or.jp"
[R]:250 Ok
[S]:DATA
[R]:354 End data with
[S]:Subject: =?iso-2022-jp?B?VGVzdBskQkF3Py4kRyQ5ISMbKEI=?=
[S]:From: =?iso-2022-jp?B?GyRCQ2YwZiRoJGobKEI=?=
以下略
[ 解説 ]
これを参考にして、ユーザープログラムを作られたい。
最低限ネットアクセスのソフトが書けないとここで紹介するサンプルは使えないと思います。
このAns に AUTH CRAM-MD5が入っています。(確認は不要だが。)
334 の回答がサーバーから送られてくるのを確認し、その後の文字列(「チャレンジ文字列」と呼ばれる)を取り出します。
実際の文字列は、"<>" でくくられた一発もののいつも違う文字列です。
この形式のチャレンジ文字列が普通のようです。
失敗すれば、5XX のAns が帰ってくる。
●
必要なのは BASE64 変換とキー付きMD5 計算
上記のサンプルでおわかりでしょう。
BASE64 変換/逆変換とキー付きMD5 計算ができれば認証ソフトは作れます。
●
サンプルソース
MD5 ソフトサンプル(MD5Smpl.lzh) Ver1.00 Feb.13,2008 のダウンロード
[ 内容 ]
[ 注意 ]
このままではコンパイルできません。あくまでも基本資料です。
これを見ても作れない人には、ネットソフトはちょっと無理と思われます。
なお、当方で実際に使っているソースから切り出したので、デバッグルーチンがいろいろ入っています、あしからず。
関数 ConnectToSvr() の AUTH 認証と前記の出力サンプルを比べて見れば、長くないので分かると思います。
次の本でも読んで CSocket が使えるようになってからもう一度おいでください。
"WinSock2 プログラミング ルイス・ナッパー著 江村豊監訳 ソフトバンククリエイティブ"
この本は私が「メール送受信ソフト、FTP ソフト」を作るのに参考にしている本です。
CSocket の使い方がこれでわかります。
送受信のプロトコルは RFC の原文を読んだ方が早いと思います。
トップ >
頁トップ