Encrypter une chaine de caractères en SHA-256 avec JavaScript

"strSHA256" est une fonction JavaScript qui permet d'encrypter une chaine de caractères avec l'algorythme SHA-256. Malgré un poids non négligeable dans une application Web, elle peut être utilisée sans l'API Web Crypto.

function strSHA256(b){
  var Y,Z,X={then:function(a){if(Y){a(Y);}return X;},catch:function(a){if(Z){a(Z);}}};try{function c(b,l){var c=(b&65535)+(l&65535),a=(b>>16)+(l>>16)+(c>>16);return a<<16|c&65535}function d(b,c){return b>>>c|b<<32-c}function y(b,l){var w=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],m=Array(64),g,e;b[l>>5]|=128<<24-l%32;b[(l+64>>9<<4)+15]=l;for(g=0;g<b.length;g+=16){var n=a[0];var q=a[1];var r=a[2];var x=a[3];var p=a[4];var u=a[5];var v=a[6];var h=a[7];for(e=0;64>e;e++){if(16>e)m[e]=b[e+g];else{var f=e;var k=m[e-2];k=d(k,17)^d(k,19)^k>>>10;k=c(k,m[e-7]);var t=m[e-15];t=d(t,7)^d(t,18)^t>>>3;m[f]=c(c(k,t),m[e-16])}f=p;f=d(f,6)^d(f,11)^d(f,25);f=c(c(c(c(h,f),p&u^~p&v),w[e]),m[e]);h=n;h=d(h,2)^d(h,13)^d(h,22);k=c(h,n&q^n&r^q&r);h=v;v=u;u=p;p=c(x,f);x=r;r=q;q=n;n=c(f,k)}a[0]=c(n,a[0]);a[1]=c(q,a[1]);a[2]=c(r,a[2]);a[3]=c(x,a[3]);a[4]=c(p,a[4]);a[5]=c(u,a[5]);a[6]=c(v,a[6]);a[7]=c(h,a[7])}return a}function z(b){for(var c=[],w=(1<<g)-1,a=0;a<b.length*g;a+=g)c[a>>5]|=(b.charCodeAt(a/g)&w)<<24-a%32;return c}function A(b){b=b.replace(/\r\n/g,"\n");for(var c="",d=0;d<b.length;d++){var a=b.charCodeAt(d);128>a?c+=String.fromCharCode(a):(127<a&&2048>a?c+=String.fromCharCode(a>>6|192):(c+=String.fromCharCode(a>>12|224),c+=String.fromCharCode(a>>6&63|128)),c+=String.fromCharCode(a&63|128))}return c}function B(b){for(var c=C?"0123456789ABCDEF":"0123456789abcdef",d="",a=0;a<4*b.length;a++)d+=c.charAt(b[a>>2]>>8*(3-a%4)+4&15)+c.charAt(b[a>>2]>>8*(3-a%4)&15);return d}var g=8,C=0;b=A(b);Y=B(y(z(b),b.length*g));}catch(e){Z=e;}return X;
}

Cette fonction est écrite sous la forme d'une Promesse non native pour garder une utilisation similaire à la méthode disponible avec l'API Crypto Web.

var mon_texte = 'Mon texte';

strSHA256(mon_texte).then(function(h){
  console.log(h);
  // renvoie : 'a73ba4ab094320027e8c0054b36845f0edd01b3425b292892e864c0fe53cb309'
});

Cet article vous a-t-il été utile ?

Super :)
Merci d'avoir donné votre avis !

Oups :(
Merci d'avoir donné votre avis qui va nous permettre de nous améliorer !

^