#include <RemoteAccessInterface.h>
// ---------------------------------------------------------------------------
OSErr EncodeARApassword ( UInt8 *userName, UInt8 *password, UInt8 *outbuf )
// ---------------------------------------------------------------------------
//
// このルーチンはパスワードをリモートアクセス接続の 'pass' リソースに
// 格納するのに適したフォーマットにエンコードする
// このルーチンでは、以前の ARA PassWordMunger API をインクリメンタルに呼び出して、
// パスワードを 256 バイトのブロックに変換する
//
{
TRemoteAccessPasswordMunger pb;
UInt8 buffer[9];
UInt8 inBuffer[256];
OSErr err;
short i;
short offset = 1;
// 変換バッファをゼロアウトする
for (i = 0; i < sizeof inBuffer ; i++) inBuffer[i] = 0;
// パスワードを中にコピーする
BlockMoveData(password, inBuffer, password[0] + 1);
// パラメータブロックをリモートアクセス API 呼び出しに対応してセットアップする
pb.csCode = RAM_EXTENDED_CALL;
pb.resultStrPtr = nil;
pb.extendedType = (char*) REMOTEACCESSNAME;
pb.extendedCode = CmdRemoteAccess_PassWordMunger;
pb.userNamePtr = userName;
pb.passWordPtr = buffer;
pb.reserved = 0;
// 1 度に 8 バイトずつ処理する
for (i = 0; i < 32 ; i++)
{
BlockMoveData(inBuffer+offset, &buffer[1], 8);
buffer[0]=8;
pb.passWordPtr = buffer;
err = PBRemoteAccess((TPRemoteAccessParamBlock) &pb, false);
if (err == noErr)
err = pb.ioResult;
if(err != noErr) break;
BlockMoveData(&buffer[1], outbuf + offset, 8);
offset+=8;
}
outbuf[0]=0; // 先頭バイトは常にゼロ
return err;
}
使用例 1 ユーザ名をキーとして使用するパスワードの暗号化
|