romanmd5
Version:
Use your choice of ancient encryption plus MD5 to extra encrypt your data!
1 lines • 5.68 kB
JavaScript
function romanMD5(){function r(r){function n(r,n){return r<<n|r>>>32-n}function t(r,n){var t,e,o,a,i;return o=2147483648&r,a=2147483648&n,t=1073741824&r,e=1073741824&n,i=(1073741823&r)+(1073741823&n),t&e?2147483648^i^o^a:t|e?1073741824&i?3221225472^i^o^a:1073741824^i^o^a:i^o^a}function e(r,n,t){return r&n|~r&t}function o(r,n,t){return r&t|n&~t}function a(r,n,t){return r^n^t}function i(r,n,t){return n^(r|~t)}function u(r,o,a,i,u,f,c){return r=t(r,t(t(e(o,a,i),u),c)),t(n(r,f),o)}function f(r,e,a,i,u,f,c){return r=t(r,t(t(o(e,a,i),u),c)),t(n(r,f),e)}function c(r,e,o,i,u,f,c){return r=t(r,t(t(a(e,o,i),u),c)),t(n(r,f),e)}function d(r,e,o,a,u,f,c){return r=t(r,t(t(i(e,o,a),u),c)),t(n(r,f),e)}function h(r){for(var n,t=r.length,e=t+8,o=(e-e%64)/64,a=16*(o+1),i=Array(a-1),u=0,f=0;t>f;)n=(f-f%4)/4,u=f%4*8,i[n]=i[n]|r.charCodeAt(f)<<u,f++;return n=(f-f%4)/4,u=f%4*8,i[n]=i[n]|128<<u,i[a-2]=t<<3,i[a-1]=t>>>29,i}function p(r){var n,t,e="",o="";for(t=0;3>=t;t++)n=r>>>8*t&255,o="0"+n.toString(16),e+=o.substr(o.length-2,2);return e}function l(r){r=r.replace(/\r\n/g,"\n");for(var n="",t=0;t<r.length;t++){var e=r.charCodeAt(t);128>e?n+=String.fromCharCode(e):e>127&&2048>e?(n+=String.fromCharCode(e>>6|192),n+=String.fromCharCode(63&e|128)):(n+=String.fromCharCode(e>>12|224),n+=String.fromCharCode(e>>6&63|128),n+=String.fromCharCode(63&e|128))}return n}var s,g,v,y,m,C,w,x,P,E=Array(),S=7,I=12,M=17,A=22,O=5,b=9,j=14,D=20,q=4,L=11,W=16,k=23,z=6,B=10,F=15,G=21;for(r=l(r),E=h(r),C=1732584193,w=4023233417,x=2562383102,P=271733878,s=0;s<E.length;s+=16)g=C,v=w,y=x,m=P,C=u(C,w,x,P,E[s+0],S,3614090360),P=u(P,C,w,x,E[s+1],I,3905402710),x=u(x,P,C,w,E[s+2],M,606105819),w=u(w,x,P,C,E[s+3],A,3250441966),C=u(C,w,x,P,E[s+4],S,4118548399),P=u(P,C,w,x,E[s+5],I,1200080426),x=u(x,P,C,w,E[s+6],M,2821735955),w=u(w,x,P,C,E[s+7],A,4249261313),C=u(C,w,x,P,E[s+8],S,1770035416),P=u(P,C,w,x,E[s+9],I,2336552879),x=u(x,P,C,w,E[s+10],M,4294925233),w=u(w,x,P,C,E[s+11],A,2304563134),C=u(C,w,x,P,E[s+12],S,1804603682),P=u(P,C,w,x,E[s+13],I,4254626195),x=u(x,P,C,w,E[s+14],M,2792965006),w=u(w,x,P,C,E[s+15],A,1236535329),C=f(C,w,x,P,E[s+1],O,4129170786),P=f(P,C,w,x,E[s+6],b,3225465664),x=f(x,P,C,w,E[s+11],j,643717713),w=f(w,x,P,C,E[s+0],D,3921069994),C=f(C,w,x,P,E[s+5],O,3593408605),P=f(P,C,w,x,E[s+10],b,38016083),x=f(x,P,C,w,E[s+15],j,3634488961),w=f(w,x,P,C,E[s+4],D,3889429448),C=f(C,w,x,P,E[s+9],O,568446438),P=f(P,C,w,x,E[s+14],b,3275163606),x=f(x,P,C,w,E[s+3],j,4107603335),w=f(w,x,P,C,E[s+8],D,1163531501),C=f(C,w,x,P,E[s+13],O,2850285829),P=f(P,C,w,x,E[s+2],b,4243563512),x=f(x,P,C,w,E[s+7],j,1735328473),w=f(w,x,P,C,E[s+12],D,2368359562),C=c(C,w,x,P,E[s+5],q,4294588738),P=c(P,C,w,x,E[s+8],L,2272392833),x=c(x,P,C,w,E[s+11],W,1839030562),w=c(w,x,P,C,E[s+14],k,4259657740),C=c(C,w,x,P,E[s+1],q,2763975236),P=c(P,C,w,x,E[s+4],L,1272893353),x=c(x,P,C,w,E[s+7],W,4139469664),w=c(w,x,P,C,E[s+10],k,3200236656),C=c(C,w,x,P,E[s+13],q,681279174),P=c(P,C,w,x,E[s+0],L,3936430074),x=c(x,P,C,w,E[s+3],W,3572445317),w=c(w,x,P,C,E[s+6],k,76029189),C=c(C,w,x,P,E[s+9],q,3654602809),P=c(P,C,w,x,E[s+12],L,3873151461),x=c(x,P,C,w,E[s+15],W,530742520),w=c(w,x,P,C,E[s+2],k,3299628645),C=d(C,w,x,P,E[s+0],z,4096336452),P=d(P,C,w,x,E[s+7],B,1126891415),x=d(x,P,C,w,E[s+14],F,2878612391),w=d(w,x,P,C,E[s+5],G,4237533241),C=d(C,w,x,P,E[s+12],z,1700485571),P=d(P,C,w,x,E[s+3],B,2399980690),x=d(x,P,C,w,E[s+10],F,4293915773),w=d(w,x,P,C,E[s+1],G,2240044497),C=d(C,w,x,P,E[s+8],z,1873313359),P=d(P,C,w,x,E[s+15],B,4264355552),x=d(x,P,C,w,E[s+6],F,2734768916),w=d(w,x,P,C,E[s+13],G,1309151649),C=d(C,w,x,P,E[s+4],z,4149444226),P=d(P,C,w,x,E[s+11],B,3174756917),x=d(x,P,C,w,E[s+2],F,718787259),w=d(w,x,P,C,E[s+9],G,3951481745),C=t(C,g),w=t(w,v),x=t(x,y),P=t(P,m);var H=p(C)+p(w)+p(x)+p(P);return H.toLowerCase()}function n(r){if("string"==typeof r){var n=["A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h","I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z"],t=r.trim().split("");for(var e in r)-1!==n.indexOf(r[e])&&(t[e]=n.indexOf(r[e])+26<n.length?n[n.indexOf(r[e])+26]:n[n.indexOf(r[e])-26]);return t.join("")}console.error("Wrong parameter type, must be type String.")}function t(r,n){function t(r){var n=[];for(var t in r)t=r[t],i.forEach(function(r,e){return t===r?(n.push(e+1),!1):void 0});return n}function e(r){var n;return i.forEach(function(t,e){return t==r&&(n=e),!1}),n}function o(r){patternIndex=0,encryptedPw=[];for(var n=0,t=r.length;t>n;n++){if(e(r[n])+wordPattern[patternIndex]>i.length-1){var o=e(r[n])+wordPattern[patternIndex]-i.length;encryptedPw.push(/\d/.test(r[n])?r[n]:i[o])}else{var o=e(r[n])+wordPattern[patternIndex];encryptedPw.push(/\d/.test(r[n])?r[n]:i[o])}patternIndex>=wordPattern.length-1?patternIndex=0:patternIndex++}return encryptedPw.join("")}function a(r){return r=r.replace(/\s+/," ").split(" "),finalEncrypt=[],r.forEach(function(r){finalEncrypt.push(o(r))}),finalEncrypt.join("")}if(!r||!n||"string"!=typeof n)throw new Error("Polyalphanumeric encryption requires a value for both password and hash salt parameters.");var i=["A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h","I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z"];return wordPattern=t(n),a(r)}this.rot13Encrypt=function(t,e){for(var o=e?!0:!1,e=e?e:Math.floor(900*Math.random()+100),a=0;e>a;a++)t=r(t),t=n(t);return o?t:[t,e]},this.polyAlphaEncrypt=function(n,e,o){for(var a=o?!0:!1,o=o?o:Math.floor(900*Math.random()+100),i=0;o>i;i++)n=r(n),n=t(n,e);return a?n:[n,o]}}module.exports=new romanMD5;