znaczacy > comp.lang.* > comp.lang.javascript

Roman Tyczka (03.08.2018, 14:32)
Potrzebuje biblioteki hashujacej, teraz akurat SHA512. Widze, ze popularna
jest/byla CryptoJS, ale to chyba martwy projekt i strach w to wbijac.
Znalazlem jeszcze jsSHA, ale nie wiem czy dobre.

Co obecnie sie uzywa do tych celów?
Borys Pogorelo (03.08.2018, 15:33)
Dnia Fri, 3 Aug 2018 14:32:48 +0200, Roman Tyczka napisal(a):

> Potrzebuje biblioteki hashujacej, teraz akurat SHA512. Widze, ze popularna
> jest/byla CryptoJS, ale to chyba martwy projekt i strach w to wbijac.
> Znalazlem jeszcze jsSHA, ale nie wiem czy dobre.


Masz to w przegladarce:
Roman Tyczka (03.08.2018, 15:45)
On Fri, 3 Aug 2018 15:33:52 +0200, Borys Pogorelo wrote:

> Dnia Fri, 3 Aug 2018 14:32:48 +0200, Roman Tyczka napisal(a):
>> Potrzebuje biblioteki hashujacej, teraz akurat SHA512. Widze, ze popularna
>> jest/byla CryptoJS, ale to chyba martwy projekt i strach w to wbijac.
>> Znalazlem jeszcze jsSHA, ale nie wiem czy dobre.

> Masz to w przegladarce:
>


O prosze, chociaz jedno mile zaskoczenie. Nawet przez sekunde wczesniej
pomyslalem, ze tak powszechnie potrzebny drobiazg jak funkcja skrótu
powinna byc w standardzie bez dodatków, ale zaraz odepchnalem mysl, bo moze
za duzo bym chcial ;-)

Jeszcze tylko dopytam, przy IE pisza, ze od wersji 11 (czyli to co jest w
Win10), co z Win7, 8 i Vista?
Roman Tyczka (03.08.2018, 16:15)
On Fri, 3 Aug 2018 15:45:08 +0200, Roman Tyczka wrote:

>> Masz to w przegladarce:
>>


Przy okazji... w CryptoJS mialem funkcje do kodowania base64, tu nie moge
znalezc. Z kolej sam JS ma niby atob() i btoa() (btw genialne nazwy!) ale
zwracaja inny wynik niz to co CryptoJS oraz inne biblioteki jakich uzywam.

Co zatem uzywac do base64?
Borys Pogorelo (03.08.2018, 19:57)
Dnia Fri, 3 Aug 2018 15:45:08 +0200, Roman Tyczka napisal(a):

> Jeszcze tylko dopytam, przy IE pisza, ze od wersji 11 (czyli to co jest w
> Win10), co z Win7, 8 i Vista?


IE11 chyba jest tez na W7, na W8 na pewno.

Jeszcze znalazlem cos takiego:


Co do base64, to witamy w swiecie javascriptu, gdzie zaczyna sie cyrk, gdy
w gre wchodza dane binarne:
Roman Tyczka (06.08.2018, 14:41)
On Fri, 3 Aug 2018 19:57:30 +0200, Borys Pogorelo wrote:

> IE11 chyba jest tez na W7, na W8 na pewno.
> Jeszcze znalazlem cos takiego:
>
> Co do base64, to witamy w swiecie javascriptu, gdzie zaczyna sie cyrk, gdy
> w gre wchodza dane binarne:
>


Nim jeszcze dotarlem do base64 juz sie odbilem od crypto.

Zrobilem sobie metode:

SHA512 : function (str) {
var buffer = new TextEncoder("utf-8").encode(str);
var hash = crypto.subtle.digest("SHA-512", buffer);
return Array.from(new Uint8Array(hash));
},

i ona po prostu nie dziala, zwraca pusta tablice.
W ostatniej linii konwertuje na tablice bajtów obiekt jaki zwraca metoda
digest(). Ale z nim cos jest nie teges, debuger pokazuje, ze ma dwa
propertysy PromiseStatus: pending i PromiseValue : undefined.
Wyczytalem, ze to jakies proxy dla wartosci wyliczanej asynchronicznie.
Skoro pending to cos sie nie skonczylo. Ale nie mam pojecia jak z tego
wybrnac.

Co robie nie tak?

ps. znalazlem jeszcze taki przyklad:



i w komentarzach ktos napisal, ze dostep do crypto api jest ograniczony do
"secure origins". Czy to znaczy, ze jesli odpalam w przegladarce strone bez
SSLa (bo nie mam lokalnie zadnego certyfikatu) to moze byc przyczyna
niedzialania crypto api? Czy da sie to obejsc?
Roman Tyczka (06.08.2018, 22:23)
On Mon, 6 Aug 2018 14:41:04 +0200, Roman Tyczka wrote:

> i w komentarzach ktos napisal, ze dostep do crypto api jest ograniczony do
> "secure origins". Czy to znaczy, ze jesli odpalam w przegladarce strone bez
> SSLa (bo nie mam lokalnie zadnego certyfikatu) to moze byc przyczyna
> niedzialania crypto api? Czy da sie to obejsc?


Odpalilem te moja funkcje na czyli spod HTTPS, nadal nie
dziala. Chyba wróce do CryptoJS.
Borys Pogorelo (08.08.2018, 22:34)
Dnia Mon, 6 Aug 2018 14:41:04 +0200, Roman Tyczka napisal(a):

> Wyczytalem, ze to jakies proxy dla wartosci wyliczanej asynchronicznie.
> Skoro pending to cos sie nie skonczylo. Ale nie mam pojecia jak z tego
> wybrnac.
> Co robie nie tak?


Nie czekasz na wynik Promise.

Jesli mozesz uzyc nowej skladni, to mozesz sobie ulatwic zycie:

async function(str) {
// ...
var hash = await crypto...
return ..
}

W przeciwnym razie powinienes jawnie poczekac na rozwiazanie sie Promise.

> i w komentarzach ktos napisal, ze dostep do crypto api jest ograniczony do
> "secure origins". Czy to znaczy, ze jesli odpalam w przegladarce strone bez
> SSLa (bo nie mam lokalnie zadnego certyfikatu) to moze byc przyczyna
> niedzialania crypto api? Czy da sie to obejsc?


Nie, localhost tez jest secure origin.
Roman Tyczka (09.08.2018, 11:04)
On Wed, 8 Aug 2018 22:34:10 +0200, Borys Pogorelo wrote:

> Nie czekasz na wynik Promise.
> Jesli mozesz uzyc nowej skladni, to mozesz sobie ulatwic zycie:
> async function(str) {
> // ...
> var hash = await crypto...
> return ..
> }


Robie tak i zonk:

async function sha512(str) {
var buffer = new TextEncoder("utf-8").encode(str);
var hash_promise = await window.crypto.subtle.digest("SHA-512", buffer)
.then(function (buff) {
var bytes = new Uint8Array(buff);
var res = '';
for (var i = 0; i < bytes.length; i++) {
var byte = bytes[i].toString(16);
byte = (byte.length < 2) ? ('0' + byte) : byte;
res += byte;}
return res;
});
return hash_promise;
}

let result = sha512('raz dwa trzy');

tutaj result ciagle jest niepoliczony, ma obiekt typu Promise ze stanem
Pending :-(

> W przeciwnym razie powinienes jawnie poczekac na rozwiazanie sie Promise.


Tylko to niestety jest dla mnie nie do ogarniecia, z przerwami tkwie juz w
tym 3ci dzie i nie potrafie tego ogarnac, mój stary mózg jest chyba zbyt
sztywny na te wielokrotnie zaglebione anonymousy.
Borys Pogorelo (10.08.2018, 11:49)
Dnia Thu, 9 Aug 2018 11:04:50 +0200, Roman Tyczka napisal(a):

> let result = sha512('raz dwa trzy');
> tutaj result ciagle jest niepoliczony, ma obiekt typu Promise ze stanem
> Pending :-(


Bo teraz wymieszales async i then(). Jesli korzystasz z async, to zycie
staje sie duzo prostsze, bo piszesz sekwencyjnie:

var buff = await window.crypto.subtle.digest("SHA-512", buffer);
var bytes = new Uint8Array(buff);
.... itd.

Trzeba zadbac tylko o jakas obsluge wyjatków.

> Tylko to niestety jest dla mnie nie do ogarniecia, z przerwami tkwie juz w
> tym 3ci dzie i nie potrafie tego ogarnac, mój stary mózg jest chyba zbyt
> sztywny na te wielokrotnie zaglebione anonymousy.


Ogarniesz. Trzeba po prostu zmienic sposób myslenia.
Roman Tyczka (10.08.2018, 12:41)
On Fri, 10 Aug 2018 11:49:53 +0200, Borys Pogorelo wrote:

> Bo teraz wymieszales async i then(). Jesli korzystasz z async, to zycie
> staje sie duzo prostsze, bo piszesz sekwencyjnie:
> var buff = await window.crypto.subtle.digest("SHA-512", buffer);
> var bytes = new Uint8Array(buff);
> ... itd.
> Trzeba zadbac tylko o jakas obsluge wyjatków.


Sprawdze to potem jeszcze raz, bo to naprawde ulatwia, choc juz z Promisami
troszke poszedlem do przodu i nawet dziala.
Ale jesli chodzi o async/await to wg dokumentacji IE tego nie wspiera,
czyli klops :/
Co prawda M$ sie juz wypial na IE ale chyba nadal sporo ludzi go uzywa,
jakie masz na ten temat zdanie?

>> Tylko to niestety jest dla mnie nie do ogarniecia, z przerwami tkwie juz w
>> tym 3ci dzie i nie potrafie tego ogarnac, mój stary mózg jest chyba zbyt
>> sztywny na te wielokrotnie zaglebione anonymousy.

> Ogarniesz. Trzeba po prostu zmienic sposób myslenia.


O tak, mózg zapiekly na klasycznym, ladnym, obiektowym i sekwencyjnym
kodzie (mimo czestego i szerokiego korzystania z watków) ma spory problem,
zeby te magie przytulic i sie pogodzic z tym jak to dziala. Co krok to
niespodzianka :-)
Roman Tyczka (10.08.2018, 12:47)
On Fri, 3 Aug 2018 19:57:30 +0200, Borys Pogorelo wrote:

>> Jeszcze tylko dopytam, przy IE pisza, ze od wersji 11 (czyli to co jest w
>> Win10), co z Win7, 8 i Vista?

> IE11 chyba jest tez na W7, na W8 na pewno.
> Jeszcze znalazlem cos takiego:
>


No, a to nie tyle mozna, co wrecz trzeba uzywac, bo sie okazuje, ze
podzbiór Crypto czyli Crypto.subtle - obiekt gdzie ukryte sa te hasze i
inne zabawki jest co prawda wspierany w IE11, ale: "User must explicitly
enable this feature". Czyli pozamiatane, bo trudno zakladac, ze ktos to
wlaczy.

Od lat pracuje na Windows i na Windows pisze soft, ale dopiero teraz
wyraznie odczuwam jak ta firma jest na bakier ze swiatem, standardami i
user experiencem, którym sobie gebe wycieraja w co drugim zdaniu :/
Borys Pogorelo (10.08.2018, 20:03)
Dnia Fri, 10 Aug 2018 12:41:31 +0200, Roman Tyczka napisal(a):

> Sprawdze to potem jeszcze raz, bo to naprawde ulatwia, choc juz z Promisami
> troszke poszedlem do przodu i nawet dziala.
> Ale jesli chodzi o async/await to wg dokumentacji IE tego nie wspiera,
> czyli klops :/


To nie jest jedyny problem z IE jaki Cie czeka. Czas sie przywitac z
Babelem, który przeksztalca kod do starszej wersji JS. Do async/await
istnieje wtyczka:

ale nie wiem jak jest z jej zgodnoscia z IE. Chyba tam nawet generatorów
jeszcze nie ma, ale moze sa jakies polyfille.

> O tak, mózg zapiekly na klasycznym, ladnym, obiektowym i sekwencyjnym
> kodzie (mimo czestego i szerokiego korzystania z watków) ma spory problem,
> zeby te magie przytulic i sie pogodzic z tym jak to dziala. Co krok to
> niespodzianka :-)


Tu przynajmniej nie masz problemów zwiazanych ze wspólbieznoscia, chociaz
tyle.
Borys Pogorelo (10.08.2018, 22:34)
Dnia Fri, 10 Aug 2018 12:47:55 +0200, Roman Tyczka napisal(a):

> Od lat pracuje na Windows i na Windows pisze soft, ale dopiero teraz
> wyraznie odczuwam jak ta firma jest na bakier ze swiatem, standardami i
> user experiencem, którym sobie gebe wycieraja w co drugim zdaniu :/


Ciesz sie, ze ominely Cie czasy IE6-IE8. W przypadku WinAPI miales latwo,
bo to MS byl autorem. A technologie webowe chcieli zagarnac dla siebie i to
byl dopiero balagan. W tamtych czasach niczym niezwyklym byl kod, gdzie
spora czescia byly wyjatki na IE (inna obsluga eventów, inny AJAX, itd.).
Dlatego tez m.in. jQuery i mu podobne biblioteki zyskaly taka popularnosc -
dawaly ujednolicone API, ukrywajac te setki wyjatków i przypadków
brzegowych.
Roman Tyczka (13.08.2018, 12:02)
On Fri, 10 Aug 2018 22:34:42 +0200, Borys Pogorelo wrote:

>> Od lat pracuje na Windows i na Windows pisze soft, ale dopiero teraz
>> wyraznie odczuwam jak ta firma jest na bakier ze swiatem, standardami i
>> user experiencem, którym sobie gebe wycieraja w co drugim zdaniu :/

> Ciesz sie, ze ominely Cie czasy IE6-IE8. W przypadku WinAPI miales latwo,
> bo to MS byl autorem. A technologie webowe chcieli zagarnac dla siebie i to
> byl dopiero balagan.


No wiem, wiem, pamietam, choc obserwowalem to z boku i osobiscie nie czulem
tego bólu :-)

A teraz popatrz jaki m$ do przodu:


> W tamtych czasach niczym niezwyklym byl kod, gdzie
> spora czescia byly wyjatki na IE (inna obsluga eventów, inny AJAX, itd.).
> Dlatego tez m.in. jQuery i mu podobne biblioteki zyskaly taka popularnosc -
> dawaly ujednolicone API, ukrywajac te setki wyjatków i przypadków
> brzegowych.


Przy okazji powiedz mi czy jQuery nadal jest uzywane w nowych projektach
czy to juz nisza i sa inne tego typu narzedzia?

Podobne wątki