Avatar billede soerens Nybegynder
07. marts 2001 - 14:40 Der er 6 kommentarer og
1 løsning

MD5 Encryption

Jeg har brug for at lave noget kaldet \"MD5 Encryption\" af brugernavn / password i forbindelse med noget authentication, men jeg har INGEN anelse om hvordan man gør sådan noget i ASP.

Jeg har fundet ud af at der vistnok er noget på en MS server kaldet CryptoAPI, men hvordan man benytter det - især i ASP - kan jeg sgu\' ikke finde ud af!

Er der nogen der har noget kode / info / links der kan hjælpe, så er der point at hente.

/SørenS
Avatar billede zeth Nybegynder
07. marts 2001 - 14:50 #1
Der er ingen funktion i ASP til at lave en md5 encryption, men du kan lave den - men det er yderst svært.. en anden mulighed er at lave den i javascript.. hvis du vil bruge den i javascript, så skriv en mail til m0rten@m0rten.dk så vi kan finde ud af noget..
Avatar billede frank_jensen Nybegynder
07. marts 2001 - 15:07 #2
En anden form for kryptering kan ses her
http://www.eksperten.dk/spm/47498

den er lavet i VBScript...
Avatar billede soerens Nybegynder
07. marts 2001 - 15:15 #3
frank_jensen: Tak for svaret, men det er _kun_ MD5 Encryption jeg har brug for.

Min side skal authenticate op imod en anden server, som kræver at jeg sender brugernavn / password MD5 Encryptet.

/SørenS
Avatar billede frank_jensen Nybegynder
07. marts 2001 - 15:16 #4
god fornøjelse... :o)
Avatar billede soerens Nybegynder
08. marts 2001 - 17:20 #5
Ok, jeg har nu fundet en (gratis) SQL Extended Stored Procedure hos 15seconds.com kaldet xp_Crypt, som ser ud til at virke.

Jeg har dog lidt problemer med at få det til at fungerer, der hvor jeg skal bruge den:

Prøv at kigge lidt på følgende:

7.3 Authentication

  The client needs to authenticate itself after protocol version
  handshake and identifying the security packages supported on the
  server. The following are the client server interactions involved.

        C: USR TrID SP I{ AuthInitiateInfo}
        S: USR TrID SP S{ AuthChallengeInfo}
        C: USR TrID SP S{ AuthResponseInfo }
        S: USR TrID OK UserHandle FriendlyName

  The SP parameter is the name of the security package(\"MD5\"). The
  next parameter is a sequence value, which must be I to (I)nitiate
  the authentication process and S for all (S)ubsequent messages. If
  authentication fails on the server, the client can start the
  authentication process again.

  For the MD5 security package:
  - The AuthInitiateInfo parameter provided by the client must be the
    User handle.
  - The AuthChallengeInfo parameter returned by the server contains a
    challenge string.
  - The AuthResponseInfo contains the binary response as a hexadecimal
    string, which the MD5 hash of the challenge and the User password
    strings concatenated together.

(kan læses i sin fulde længde på http://www.cs.berkeley.edu/~mikechen/im/protocols/msn/draft-movva-msn-messenger-protocol-00.txt)

Det jeg har lidt problemer med er den sidste del: \"...which the MD5 hash of the challenge and the User password strings concatenated together...\"

\"concatenate\" betyder vistnok sammenlagt eller sammenkædet.

Jeg har forsøgt alle, mulige kombinationer af challenge strengen og user passwordet uden held.

Et eksempel på challenge strengen er: 984065749.58305985

Der er point til den der kan skubbe mig i den rette retning så jeg ka\' få løst problemet ;-)

/SørenS.
Avatar billede zeth Nybegynder
08. marts 2001 - 18:03 #6
Prøv med det her.. bruger den selv..:

<html>
<head>
<title> MD5 Message Digest algorithm in Javascript</title>
<script>
/* convert integer to hex string */
var sHex = \"0123456789abcdef\";
function hex(i){
  h = \"\";
  for(j = 0; j <= 3; j++)
    h += sHex.charAt((i>>(j*8+4))&0x0F)+sHex.charAt((i>>(j*8))&0x0F);
  return h;
}
/* add, handling overflows correctly */
function add(x, y){
  return ((x&0x7FFFFFFF) + (y&0x7FFFFFFF)) ^ (x&0x80000000) ^ (y&0x80000000);
}
/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T){
  q = add(add(A, (B & C) | ((~B) & D)), add(X, T));
  return add((q << S) | (q >>> (32 - S)), B);
}
function R2(A, B, C, D, X, S, T){
  q = add(add(A, (B & D) | (C & (~D))), add(X, T));
  return add((q << S) | (q >>> (32 - S)), B);
}
function R3(A, B, C, D, X, S, T){
  q = add(add(A, B ^ C ^ D), add(X, T));
  return add((q << S) | (q >>> (32 - S)), B);
}
function R4(A, B, C, D, X, S, T){
  q = add(add(A, C ^ (B | (~D))), add(X, T));
  return add((q << S) | (q >>> (32 - S)), B);
}
/* main entry point */
function calcMD5(sInp) {
/* Calculate length in machine words, including padding */
wLen = (((sInp.length + 8) >> 6) + 1) << 4;
var X = new Array(wLen);
/* Convert string to array of words */
j = 4;
for (i = 0; (i * 4) < sInp.length; i++) {
  X[i] = 0;
  for (j = 0; (j < 4) && ((j + i * 4) < sInp.length); j++) {
      X[i] += sInp.charCodeAt(j + i * 4) << (j * 8);
    }
  }
/* Append padding bits and length */
if (j == 4) X[i++] = 0x80;
else X[i - 1] += 0x80 << (j * 8);
for(; i < wLen; i++) { X[i] = 0; }
X[wLen - 2] = sInp.length * 8;
/* hard coded initial values */
a = 0x67452301; b = 0xefcdab89; c = 0x98badcfe; d = 0x10325476;

/* Process each 16 word block in turn */
for (i=0; i<wLen; i+=16) {
aO=a; bO=b; cO=c; dO=d;

a=R1(a,b,c,d,X[i+ 0],7 ,0xd76aa478);
d=R1(d,a,b,c,X[i+ 1],12,0xe8c7b756);
c=R1(c,d,a,b,X[i+ 2],17,0x242070db);
b=R1(b,c,d,a,X[i+ 3],22,0xc1bdceee);
a=R1(a,b,c,d,X[i+ 4],7 ,0xf57c0faf);
d=R1(d,a,b,c,X[i+ 5],12,0x4787c62a);
c=R1(c,d,a,b,X[i+ 6],17,0xa8304613);
b=R1(b,c,d,a,X[i+ 7],22,0xfd469501);
a=R1(a,b,c,d,X[i+ 8],7 ,0x698098d8);
d=R1(d,a,b,c,X[i+ 9],12,0x8b44f7af);
c=R1(c,d,a,b,X[i+10],17,0xffff5bb1);
b=R1(b,c,d,a,X[i+11],22,0x895cd7be);
a=R1(a,b,c,d,X[i+12],7 ,0x6b901122);
d=R1(d,a,b,c,X[i+13],12,0xfd987193);
c=R1(c,d,a,b,X[i+14],17,0xa679438e);
b=R1(b,c,d,a,X[i+15],22,0x49b40821);

a=R2(a,b,c,d,X[i+ 1],5 ,0xf61e2562);
d=R2(d,a,b,c,X[i+ 6],9 ,0xc040b340);
c=R2(c,d,a,b,X[i+11],14,0x265e5a51);
b=R2(b,c,d,a,X[i+ 0],20,0xe9b6c7aa);
a=R2(a,b,c,d,X[i+ 5],5 ,0xd62f105d);
d=R2(d,a,b,c,X[i+10],9 , 0x2441453);
c=R2(c,d,a,b,X[i+15],14,0xd8a1e681);
b=R2(b,c,d,a,X[i+ 4],20,0xe7d3fbc8);
a=R2(a,b,c,d,X[i+ 9],5 ,0x21e1cde6);
d=R2(d,a,b,c,X[i+14],9 ,0xc33707d6);
c=R2(c,d,a,b,X[i+ 3],14,0xf4d50d87);
b=R2(b,c,d,a,X[i+ 8],20,0x455a14ed);
a=R2(a,b,c,d,X[i+13],5 ,0xa9e3e905);
d=R2(d,a,b,c,X[i+ 2],9 ,0xfcefa3f8);
c=R2(c,d,a,b,X[i+ 7],14,0x676f02d9);
b=R2(b,c,d,a,X[i+12],20,0x8d2a4c8a);

a=R3(a,b,c,d,X[i+ 5],4 ,0xfffa3942);
d=R3(d,a,b,c,X[i+ 8],11,0x8771f681);
c=R3(c,d,a,b,X[i+11],16,0x6d9d6122);
b=R3(b,c,d,a,X[i+14],23,0xfde5380c);
a=R3(a,b,c,d,X[i+ 1],4 ,0xa4beea44);
d=R3(d,a,b,c,X[i+ 4],11,0x4bdecfa9);
c=R3(c,d,a,b,X[i+ 7],16,0xf6bb4b60);
b=R3(b,c,d,a,X[i+10],23,0xbebfbc70);
a=R3(a,b,c,d,X[i+13],4 ,0x289b7ec6);
d=R3(d,a,b,c,X[i+ 0],11,0xeaa127fa);
c=R3(c,d,a,b,X[i+ 3],16,0xd4ef3085);
b=R3(b,c,d,a,X[i+ 6],23, 0x4881d05);
a=R3(a,b,c,d,X[i+ 9],4 ,0xd9d4d039);
d=R3(d,a,b,c,X[i+12],11,0xe6db99e5);
c=R3(c,d,a,b,X[i+15],16,0x1fa27cf8);
b=R3(b,c,d,a,X[i+ 2],23,0xc4ac5665);

a=R4(a,b,c,d,X[i+ 0],6 ,0xf4292244);
d=R4(d,a,b,c,X[i+ 7],10,0x432aff97);
c=R4(c,d,a,b,X[i+14],15,0xab9423a7);
b=R4(b,c,d,a,X[i+ 5],21,0xfc93a039);
a=R4(a,b,c,d,X[i+12],6 ,0x655b59c3);
d=R4(d,a,b,c,X[i+ 3],10,0x8f0ccc92);
c=R4(c,d,a,b,X[i+10],15,0xffeff47d);
b=R4(b,c,d,a,X[i+ 1],21,0x85845dd1);
a=R4(a,b,c,d,X[i+ 8],6 ,0x6fa87e4f);
d=R4(d,a,b,c,X[i+15],10,0xfe2ce6e0);
c=R4(c,d,a,b,X[i+ 6],15,0xa3014314);
b=R4(b,c,d,a,X[i+13],21,0x4e0811a1);
a=R4(a,b,c,d,X[i+ 4],6 ,0xf7537e82);
d=R4(d,a,b,c,X[i+11],10,0xbd3af235);
c=R4(c,d,a,b,X[i+ 2],15,0x2ad7d2bb);
b=R4(b,c,d,a,X[i+ 9],21,0xeb86d391);

a=add(a,aO); b=add(b,bO); c=add(c,cO); d=add(d,dO);
}
return hex(a)+hex(b)+hex(c)+hex(d); // .toUpperCase();
}
function test(){ // from RFC 1321
if (calcMD5(\"\") != \"d41d8cd98f00b204e9800998ecf8427e\"
|| calcMD5(\"a\") != \"0cc175b9c0f1b6a831c399e269772661\"
|| calcMD5(\"abc\") != \"900150983cd24fb0d6963f7d28e17f72\"
|| calcMD5(\"message digest\") != \"f96b697d7cb7938d525a2f31aaf161d0\")
alert(\"MD5 failed consistency check!\");
}
</script>
</head>

<body>

<form>
Det der skal kryptes: <input type=\"text\" name=\"input\" value=\"\" size=50>
<input type=\"button\" value=\"Click here to run MD5\"
onclick=\"test();this.form.hash.value=calcMD5(this.form.input.value)\">
<p><p>
MD5 hash: <input type=\"text\" name=\"hash\" value=\"\" size=35>
</form>

</body>
</html>
Avatar billede soerens Nybegynder
09. marts 2001 - 08:45 #7
Yep, gi\'r nøjagtigt samme resultat som min Stored Procedure ;-)

Din er dog bedre, da man så ikke er afhængig af en MS SQL server, derfor får du point ;-)

Nu mangler jeg bare lige at konvertere den til noget server-side scripting, men det er der jo ingen ben i......

/Søren

PS.: Hvis nogen kan hjælpe mig bare en lille smule med mit MD5 og MSN Messenger problem, så er der yderligere 50 point at hente!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester