Even though I saw the edit that you've said you got it, I'm providing this... Probably has some idiotic scripting but it works, gave it a good test run.

(I believe quoting gives out the original indentation.)
DOOR: (The included Open and Close functions use my favorite method of HollowDoor.)
//Door Authorization (Door) Script by Faust Vollmar.
//Released under CC-by 3.0 Licence.
//String Replace Function from the Combined Library, used under Creative Commons.
//
//Uses very simple Xor Encryption to make aquiring the password require more effort than a listener, nothing more.
//Doors don't really stop people, but one functioning on a key makes for a nice RP scenepiece, thus the SayOnFail and SayType variables.
integer SPEAK_WHISPER = 1;
integer SPEAK_INSTANT = 2;
integer SPEAK_OWNER = 3;
/////Start Config Stuff./////
integer channel = -900;
string password = "HiImAPassword";
float TimeThenClose = 10.0;
string SayOnFail = "Authentication Failed."; // Use %w to include an avatar name. Use "" to disable messages.
integer SayType = SPEAK_INSTANT;
/////End Config Stuff./////
integer primtype;
key IdentifyKey = NULL_KEY;
integer AuthTimer = FALSE;
integer AuthListen;
string str_replace(string src, string from, string to)
{
integer len = (~-(llStringLength(from)));
if(~len)
{
string buffer = src;
integer b_pos = -1;
integer to_len = (~-(llStringLength(to)));
@loop;
integer to_pos = ~llSubStringIndex(buffer, from);
if(to_pos)
{
buffer = llGetSubString(src = llInsertString(llDeleteSubString(src, b_pos -= to_pos, b_pos + len), b_pos, to), (-~(b_pos += to_len)), 0x8000);
jump loop;
}
}
return src;
}
open()
{
llSetPrimitiveParams([PRIM_TYPE, primtype , PRIM_HOLE_DEFAULT, <0.0,1.0,0.0>, 0.95, ZERO_VECTOR, <1.0,1.0,0.0>, ZERO_VECTOR]);
}
close()
{
llSetPrimitiveParams([PRIM_TYPE, primtype , PRIM_HOLE_DEFAULT, <0.0,1.0,0.0>, 0.0, ZERO_VECTOR, <1.0,1.0,0.0>, ZERO_VECTOR]);
}
default
{
state_entry()
{
primtype = llList2Integer(llGetPrimitiveParams([PRIM_TYPE]),0);
}
touch_start(integer num)
{
IdentifyKey = llDetectedKey(0);
AuthListen = llListen(channel,"","",""

;
llWhisper(channel,"keycheck#" + (string)IdentifyKey);
llSetTimerEvent(5);
}
listen(integer channel, string name, key id, string message)
{
string date = llGetDate();
string decrypt = llBase64ToString(llXorBase64StringsCorrect(message, llStringToBase64(password + date)));
list input = llParseString2List(decrypt, ["#"],[]);
key checkIdentifyKey = llList2Key(input,1);
string checkkey = llList2String(input, 0);
string sender = llGetOwnerKey(id);
if(checkkey == password && checkIdentifyKey == IdentifyKey)
{
llListenRemove(AuthListen);
IdentifyKey = NULL_KEY;
open();
llSetTimerEvent(TimeThenClose);
}
else
{
llListenRemove(AuthListen);
string SayPaste = str_replace(SayOnFail, "%w", llKey2Name(sender));
if(SayOnFail != ""

{
if(SayType == 1)
{
llWhisper(0, SayPaste);
}
else if(SayType == 2)
{
llInstantMessage(sender, SayPaste);
}
if(SayType == 3)
{
llOwnerSay(SayPaste);
}
}
}
}
timer()
{
if(AuthTimer)
{
llListenRemove(AuthListen);
IdentifyKey = NULL_KEY;
}
else
{
close();
}
llSetTimerEvent(0);
}
}
KEY: Rezzed, Worn (Body or Hud), doesn't matter.
//Door Authorization (Key) Script by Faust Vollmar.
//Free to use or modify, however distribution as-is must be free of charge.
//Start Config Stuff.//
integer channel = -900;
string password = "HiImAPassword";
//End Config Stuff.//
default
{
state_entry()
{
llListen(channel,"","",""

;
}
listen(integer channel, string name, key id, string message)
{
key owner = llGetOwner();
list input = llParseString2List(message, ["#"],[]);
string param = llList2String(input, 0);
key ident = llList2Key(input, 1);
if(param == "keycheck" && ident == owner);
{
string date = llGetDate();
string crypt = llXorBase64StringsCorrect(llStringToBase64(password + "#" + (string)owner), llStringToBase64(password + date));
llWhisper(channel, crypt);
}
}
}