Если фри, то выше кинули, если через сервисы, можно также "вдохновиться" моим скриптом решалки Яндекс капчи, там ровно такая же суть, но прикручено решение через антигейт (с ручными индусами), но можно так и любой сервис с индусами прикрутить. Решение на гуру не чекал, баланса небыло на аке)
Создание hash для файла
-
Собственно заморочился и не знаю какой метод лучше выбрать.
собственно такой вариант работаетvar MD5 = function(d){var r = M(V(Y(X(d),8*d.length)));return r.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_} /** NORMAL words**/ var value = [[MYFILE]]; var result = MD5(value); VAR_HASH = result;Но тут еще почитал что мол быстрее всего и меньше столкновения тип можно использовать SubtleCrypto
Кто чем пользуется и кто что посоветует ?
-
@Bigma модуль Checksum же есть, не подходит?
-
@Oyasumi-Punpun ты имеешь ввиду в ноде ?
-
@Bigma нет, для БАС модуль, или тебе обязательно через ноду надо?
-
нашел более надежный sha-256
без использования ноды можноvar sha256=function a(b){function c(a,b){return a>>>b|a<<32-b}for(var d,e,f=Math.pow,g=f(2,32),h="length",i="",j=[],k=8*b[h],l=a.h=a.h||[],m=a.k=a.k||[],n=m[h],o={},p=2;64>n;p++)if(!o[p]){for(d=0;313>d;d+=p)o[d]=p;l[n]=f(p,.5)*g|0,m[n++]=f(p,1/3)*g|0}for(b+="\x80";b[h]%64-56;)b+="\x00";for(d=0;d<b[h];d++){if(e=b.charCodeAt(d),e>>8)return;j[d>>2]|=e<<(3-d)%4*8}for(j[j[h]]=k/g|0,j[j[h]]=k,e=0;e<j[h];){var q=j.slice(e,e+=16),r=l;for(l=l.slice(0,8),d=0;64>d;d++){var s=q[d-15],t=q[d-2],u=l[0],v=l[4],w=l[7]+(c(v,6)^c(v,11)^c(v,25))+(v&l[5]^~v&l[6])+m[d]+(q[d]=16>d?q[d]:q[d-16]+(c(s,7)^c(s,18)^s>>>3)+q[d-7]+(c(t,17)^c(t,19)^t>>>10)|0),x=(c(u,2)^c(u,13)^c(u,22))+(u&l[1]^u&l[2]^l[1]&l[2]);l=[w+x|0].concat(l),l[4]=l[4]+w|0}for(d=0;8>d;d++)l[d]=l[d]+r[d]|0}for(d=0;8>d;d++)for(e=3;e+1;e--){var y=l[d]>>8*e&255;i+=(16>y?0:"")+y.toString(16)}return i}; var resultik = sha256('hello world'); VAR_HASH = resultik;может кому пригодится, но есть проблема подходит только для ASCII
-
@Oyasumi-Punpun чето не нашел для баса, это где ? ставить надо ?
-
@Bigma вроде в релизе уже есть давно, в менеджере модулей Checksum (Контрольная сумма), он вроде как отключен по умолчанию.
-
@Oyasumi-Punpun said in Создание hash для файла:
да отключен, вот я и найти не мог, эх спасибо мил человек.
А то я тут пол инете перешерстил но таки нашел :)
может кому сгодится для sha256 с поддержкой utf8//https://codepen.io/aminraisy/pen/OeOvxr?editors=0010 var Sha256={hash:function(r,a){(a=void 0===a||a)&&(r=Utf8.encode(r));for(var t=[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],e=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],o=(r+=String.fromCharCode(128)).length/4+2,n=Math.ceil(o/16),h=new Array(n),u=0;u<n;u++){h[u]=new Array(16);for(var S=0;S<16;S++)h[u][S]=r.charCodeAt(64*u+4*S)<<24|r.charCodeAt(64*u+4*S+1)<<16|r.charCodeAt(64*u+4*S+2)<<8|r.charCodeAt(64*u+4*S+3)}h[n-1][14]=8*(r.length-1)/Math.pow(2,32),h[n-1][14]=Math.floor(h[n-1][14]),h[n-1][15]=8*(r.length-1)&4294967295;var f,c,i,C,d,R,g,v,A=new Array(64);for(u=0;u<n;u++){for(var m=0;m<16;m++)A[m]=h[u][m];for(m=16;m<64;m++)A[m]=Sha256.sigma1(A[m-2])+A[m-7]+Sha256.sigma0(A[m-15])+A[m-16]&4294967295;f=e[0],c=e[1],i=e[2],C=e[3],d=e[4],R=e[5],g=e[6],v=e[7];for(m=0;m<64;m++){var O=v+Sha256.Sigma1(d)+Sha256.Ch(d,R,g)+t[m]+A[m],T=Sha256.Sigma0(f)+Sha256.Maj(f,c,i);v=g,g=R,R=d,d=C+O&4294967295,C=i,i=c,c=f,f=O+T&4294967295}e[0]=e[0]+f&4294967295,e[1]=e[1]+c&4294967295,e[2]=e[2]+i&4294967295,e[3]=e[3]+C&4294967295,e[4]=e[4]+d&4294967295,e[5]=e[5]+R&4294967295,e[6]=e[6]+g&4294967295,e[7]=e[7]+v&4294967295}return Sha256.toHexStr(e[0])+Sha256.toHexStr(e[1])+Sha256.toHexStr(e[2])+Sha256.toHexStr(e[3])+Sha256.toHexStr(e[4])+Sha256.toHexStr(e[5])+Sha256.toHexStr(e[6])+Sha256.toHexStr(e[7])},ROTR:function(r,a){return a>>>r|a<<32-r},Sigma0:function(r){return Sha256.ROTR(2,r)^Sha256.ROTR(13,r)^Sha256.ROTR(22,r)},Sigma1:function(r){return Sha256.ROTR(6,r)^Sha256.ROTR(11,r)^Sha256.ROTR(25,r)},sigma0:function(r){return Sha256.ROTR(7,r)^Sha256.ROTR(18,r)^r>>>3},sigma1:function(r){return Sha256.ROTR(17,r)^Sha256.ROTR(19,r)^r>>>10},Ch:function(r,a,t){return r&a^~r&t},Maj:function(r,a,t){return r&a^r&t^a&t},toHexStr:function(r){for(var a="",t=7;t>=0;t--)a+=(r>>>4*t&15).toString(16);return a}},Utf8={encode:function(r){var a=r.replace(/[\u0080-\u07ff]/g,function(r){var a=r.charCodeAt(0);return String.fromCharCode(192|a>>6,128|63&a)});return a=a.replace(/[\u0800-\uffff]/g,function(r){var a=r.charCodeAt(0);return String.fromCharCode(224|a>>12,128|a>>6&63,128|63&a)})},decode:function(r){var a=r.replace(/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,function(r){var a=(15&r.charCodeAt(0))<<12|(63&r.charCodeAt(1))<<6|63&r.charCodeAt(2);return String.fromCharCode(a)});return a=a.replace(/[\u00c0-\u00df][\u0080-\u00bf]/g,function(r){var a=(31&r.charCodeAt(0))<<6|63&r.charCodeAt(1);return String.fromCharCode(a)})}}; var value = [[MY_STRING]]; VAR_HASH = Sha256.hash(value);