Autor Zpráva
stillintroubles
Profil *
Ahojky lidičky,
prosím o pomoc, potřebuji udělat následující věc, ale netuším, jak na to.
Potřebuji, aby flash ověřil, zda uživatel má správné jméno a heslo pro přístup do dalšího frame. Čili na snímku jedna je input text login a password, tlačítko submit. Po zadání správného loginu pustit uživatele dál, po nesprávném loginu nepustit. Jak na to?
K tomu se vztahuje ještě 2 věci, za prvé: Lze "zahvězdičkovat" password, aby to skutečně vypadalo jako při zadávání hesla?
a za 2) jde nějak čerpat ty přihlašovací údaje z externích zdrojů (a nějak je zašifrovat proti otevření??), to abych enmusel při každém novém uživateli měnit celý kód??
Sand toho není mnoho, každopádně předem díky!!!
Fenrir
Profil *
No Jasne že to lze...

Takže první věc zde i pro všechny ostatní zadávám ActionScript pro převod jakéhokoliv stringu do md5 hashe

#########################################################
var hexcase = 0;
var b64pad = "";
var chrsz = 8;
function hex_md5(s) {
return binl2hex(core_md5(str2binl(s), s.length*chrsz));
}
function b64_md5(s) {
return binl2b64(core_md5(str2binl(s), s.length*chrsz));
}
function str_md5(s) {
return binl2str(core_md5(str2binl(s), s.length*chrsz));
}
function hex_hmac_md5(key, data) {
return binl2hex(core_hmac_md5(key, data));
}
function b64_hmac_md5(key, data) {
return binl2b64(core_hmac_md5(key, data));
}
function str_hmac_md5(key, data) {
return binl2str(core_hmac_md5(key, data));
}
function md5_vm_test() {
return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}
function core_md5(x, len) {
x[len >> 5] |= 0x80 << ((len)%32);
x[(((len+64) >>> 9) << 4)+14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (var i = 0; i<x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i+0], 7, -680876936);
d = md5_ff(d, a, b, c, x[i+1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i+2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i+3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i+4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i+5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i+6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i+7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i+8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i+9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i+12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i+1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i+6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i+0], 20, -373897302);
a = md5_gg(a, b, c, d, x[i+5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i+10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i+4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i+9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i+14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i+3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i+8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i+13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i+2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i+7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i+5], 4, -378558);
d = md5_hh(d, a, b, c, x[i+8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i+1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i+4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i+7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i+13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i+0], 11, -358537222);
c = md5_hh(c, d, a, b, x[i+3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i+6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i+9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i+2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i+0], 6, -198630844);
d = md5_ii(d, a, b, c, x[i+7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i+5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i+12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i+3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i+1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i+8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i+6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i+4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i+2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i+9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return Array(a, b, c, d);
}
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function core_hmac_md5(key, data) {
var bkey = str2binl(key);
if (bkey.length>16) {
bkey = core_md5(bkey, key.length*chrsz);
}
var ipad = Array(16), opad = Array(16);
for (var i = 0; i<16; i++) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512+data.length*chrsz);
return core_md5(opad.concat(hash), 512+128);
}
function safe_add(x, y) {
var lsw = (x & 0xFFFF)+(y & 0xFFFF);
var msw = (x >> 16)+(y >> 16)+(lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32-cnt));
}
function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz)-1;
for (var i = 0; i<str.length*chrsz; i += chrsz) {
bin[i >> 5] |= (str.charCodeAt(i/chrsz) & mask) << (i%32);
}
return bin;
}
function binl2str(bin) {
var str = "";
var mask = (1 << chrsz)-1;
for (var i = 0; i<bin.length*32; i += chrsz) {
str += String.fromCharCode((bin[i >> 5] >>> (i%32)) & mask);
}
return str;
}
function binl2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for (var i = 0; i<binarray.length*4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i%4)*8+4)) & 0xF)+hex_tab.charAt((binarray[i >> 2] >> ((i%4)*8)) & 0xF);
}
return str;
}
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i<binarray.length*4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8*(i%4)) & 0xFF) << 16) | (((binarray[i+1 >> 2] >> 8*((i+1)%4)) & 0xFF) << 8) | ((binarray[i+2 >> 2] >> 8*((i+2)%4)) & 0xFF);
for (var j = 0; j<4; j++) {
if (i*8+j*6>binarray.length*32) {
str += b64pad;
} else {
str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
}
}
}
return str;
}

#########################################################

Celé toto si nakopírujte do flashe, v tomto scriptu je funkce

hex_md5();

funkcionalirta je nám známá...

mám proměnou pwd kde mám heslo které uživatel zadal...
dále mám proměnou pwdHash kam chci uložit hash toho hesla takže

pwdHash = hex_md5(pwd);

teď už jenom ověření uživatele, samozřejmě by bylo apsolutně nejlepší použít pro toto ověřování databázy a třeba php nebo nějaké web service, ale...
na serveru budeme mít soubor hesla.txt který bude vypadat asi takto

heslaUzivatelu=heslovhash1;heslovhash2;heslovhash3;heslohash4

a tak dále ty hesla si sou taky v md5 takže si udělej ještě jednu aplikaci na generování těch hesel... zase použij funkci hex_md5

kde bude napsano

načtení hesel do flashe

loadVariables("hesla.txt");

teď je budeš mít dostupná pod heslaUzivatelu

takže rozdělíme si hesla podle středníku do pole, v tom souboru txt je máme oddělena středníkem

arrayPWD = heslaUzivatelu.Split(";");

pak uže jenom porovnáme hesla tímto zpusobem


for(i=0;i<arrayPWD.length;i++)
{
if(arrayPWD[i] == pwdHash)
{
Ano heslo sedí tak provedem co potřebujem
}
}

Jedinou výhodu kterou tímto hashem získáme bude to že když si někdo stáhne z webu ten txt soubor tak ty hesla neuvydí přímo ale zaheshovaná,

z hesh se nedá dostat původní heslo na spátek proto porovnáváme hesla mezi sebou zaheshovbaná

Kdyby něco tak nic....
stillintroubles
Profil *
No tak to teda MOOOC PĚKNĚ DĚKUJU!!!! Jdu se v tom pošťourat, kdybych měl nějaký problém, mohu se snad ještě ozvat?
Ještě jednou díky za naprosto vyčerpávající odpověď!

stillintroubles

P.S. Budu ti provolávat slávu až do konce života :-))))
fenrir
Profil *
Jasně není problém, kdyby byl nějakej problém tak sem napiš.

Zatim.
stillintroubles
Profil *
hmmm, tak jsem zjistil, že jsem prostě negramot, nebo co :-)). Vím, že tady nahoře mám naprosto jasně popsáno, co mám udělat, ale mě to prostě nejde a nejde. Hergotfagot! Byla by velká drzost po tobě chtít, abys mi to hodil přímo do flashe a pak poslal?? Omlouvám se, pokud jsem tě nějak tento... děkuji!
Fenrir
Profil
Takže posílám ten fla, je to pro macromedia flash MX 2004.

Je tam malá uprava a to sice v tom txt:

heslaUzivatelu=098f6bcd4621d373cade4e832627b4f6__honza__1;098f6bcd4621 d373cade4e832627b4f6__karel__2

teď tam sou "zalozeny" dve osoby a to osoba z loginem honza a karel oba mají stejné heslo a to: test ovsem karel má práva k aplikaci 2 a honza pouze 1 viz zdrojak.

Takhle tam zadáš defakto veškeré osoby které potřebuješ, neříkám že je to nejbezpečnější způsob, ale tak nějak lepší než to mít napsané jen tak.

Ovšem mám drobnej problémek že nevím jak sem mám ten soubor vrazit, takže je na

test.zip
Fenrir
Profil
Tak to nějak nejde takže ještě malej momentík, otevřete internet exploder nebo firefox nebo tak něco a zadejte tam:

http://www.zlatykun.com/honza/test.zip

ten samej odkaz je v tom posledním příspěvku ale nějak to nefachá,

Možná by se hodila možnost připojovat sem soubory.....:)
stillintroubles
Profil *
Tak už vím,odkud vítr vane... v mojí verzi MX (6)to chodit zkrátka nebude a nebude... budu muset upgradovat, ale kde vzít těch pár tisíc?? :-(
fenrir
Profil *
Pod 6 nebo teda macromedia MX, to funguje bezproblému, máš asi někde jinde problém, co ti to píše něco jako: unsuported movie nebo function nebo tak něco??? Myslím tím při kompilaci?, otevřeš vubec ten projektovej soubor co sem sem hodil??

??? Popřípadě mě hoď email s tím zdrojákem na adresu fenrir@profisit.cz.
stillintroubles
Profil *
ne, díky, už je to v poho, špatně jsem to zkopíroval a ono to prostě nefungovalo... teď je to už OK, ještě jednou díky!!
stillintroubles
Profil *
tak jsem to všechno pochopil,jen nevím, jak vytvořit generátor těch hesel a jak jej použít, ale to už bych asi chtělpříliš mnoho,že jo... :-)
stillintroubles
Profil *
takuž jsem na to přišel... aspoň na něco... bída s nouzí to je se mnou... aleještě jednou - díííky
Toto téma je uzamčeno. Odpověď nelze zaslat.

0