This is an include script for encrypting and decrypting strings using two methods, one-way (SHA256) or two-way (GlideEncrypter), the two-way method also supports 24 char key as parameter to encrypt.

Script Include

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
var EncryptionUtils = Class.create();
EncryptionUtils.prototype = {
	initialize: function() {
		var chrsz = 8;
		var hexcase = 0;
	},

	encryptTwoWay: function(str, key){
		var encr;
		if(typeof key != 'undefined')
			encr = new GlideEncrypter(key);
		else
			encr = new GlideEncrypter();
		return encr.encrypt(str);
	},

	decryptTwoWay: function(str, key){
		var encr;
		if(typeof key != 'undefined')
			encr = new GlideEncrypter(key);
		else
			encr = new GlideEncrypter();
		return encr.decrypt(str);	
	},

	encryptOneWay: function(str){
		return this.SHA256(str);
	},

	SHA256: function(s) {
		var chrsz = 8;
		var hexcase = 0;
		s = this.Utf8Encode(s);
		return this.binb2hex(this.core_sha256(this.str2binb(s), s.length * chrsz));
	},
	safe_add: function(x, y) {
		var lsw = (x & 0xFFFF) + (y & 0xFFFF);
		var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
		return (msw << 16) | (lsw & 0xFFFF);
	},
	S: function(X, n) {
		return (X >>> n) | (X << (32 - n));
	},
	R: function(X, n) {
		return (X >>> n);
	},
	Ch: function(x, y, z) {
		return ((x & y) ^ ((~x) & z));
	},
	Maj: function(x, y, z) {
		return ((x & y) ^ (x & z) ^ (y & z));
	},
	Sigma0256: function(x) {
		return (this.S(x, 2) ^ this.S(x, 13) ^ this.S(x, 22));
	},
	Sigma1256: function(x) {
		return (this.S(x, 6) ^ this.S(x, 11) ^ this.S(x, 25));
	},
	Gamma0256: function(x) {
		return (this.S(x, 7) ^ this.S(x, 18) ^ this.R(x, 3));
	},
	Gamma1256: function(x) {
		return (this.S(x, 17) ^ this.S(x, 19) ^ this.R(x, 10));
	},
	core_sha256: function(m, l) {
		var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);
		var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);
		var W = new Array(64);
		var a, b, c, d, e, f, g, h, i, j;
		var T1, T2;
		m[l >> 5] |= 0x80 << (24 - l % 32);
		m[((l + 64 >> 9) << 4) + 15] = l;
		for (var i = 0; i < m.length; i += 16) {
			a = HASH[0];
			b = HASH[1];
			c = HASH[2];
			d = HASH[3];
			e = HASH[4];
			f = HASH[5];
			g = HASH[6];
			h = HASH[7];
			for (var j = 0; j < 64; j++) {
				if (j < 16) W[j] = m[j + i];
				else W[j] = this.safe_add(this.safe_add(this.safe_add(this.Gamma1256(W[j - 2]), W[j - 7]), this.Gamma0256(W[j - 15])), W[j - 16]);
				T1 = this.safe_add(this.safe_add(this.safe_add(this.safe_add(h, this.Sigma1256(e)), this.Ch(e, f, g)), K[j]), W[j]);
				T2 = this.safe_add(this.Sigma0256(a), this.Maj(a, b, c));
				h = g;
				g = f;
				f = e;
				e = this.safe_add(d, T1);
				d = c;
				c = b;
				b = a;
				a = this.safe_add(T1, T2);
			}
			HASH[0] = this.safe_add(a, HASH[0]);
			HASH[1] = this.safe_add(b, HASH[1]);
			HASH[2] = this.safe_add(c, HASH[2]);
			HASH[3] = this.safe_add(d, HASH[3]);
			HASH[4] = this.safe_add(e, HASH[4]);
			HASH[5] = this.safe_add(f, HASH[5]);
			HASH[6] = this.safe_add(g, HASH[6]);
			HASH[7] = this.safe_add(h, HASH[7]);
		}
		return HASH;
	},
	str2binb: function(str) {
		var chrsz = 8;
		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) << (24 - i % 32);
		}
		return bin;
	},
	Utf8Encode: function(string) {
		string = string.replace(/\r\n/g, "\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			} else if ((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			} else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return utftext;
	},
	binb2hex: function(binarray) {
		var hexcase = 0;
		var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
		var str = "";
		for (var i = 0; i < binarray.length * 4; i++) {
			str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF);
		}
		return str;
	},

	type: 'EncryptionUtils'
};

Usage Examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var plain_string = "String to be encrypted";
var example_encrypted_string = "7RywTbx5YaB6iSyRs0aGbg==";
var example_key = "qwertyuiopasdfghjklzxcvb";

var enc = new EncryptionUtils();

enc.encryptOneWay(plain_string); // SHA256 algorithm
// output: db4cc5971b5e6180c17eb4b787507cba4eae091a2822a435879cf987f5b83fcd

enc.encryptTwoWay(plain_string); // Omit key
// output: +yYjuvnlejGmkhb4tum2BQ==

enc.encryptTwoWay(plain_string, example_key); // Using key
// output: 7RywTbx5YaB6iSyRs0aGbg==

enc.decryptTwoWay('+yYjuvnlejGmkhb4tum2BQ=='); // Omit key
// output: String to be encrypted

enc.decryptTwoWay('7RywTbx5YaB6iSyRs0aGbg=='); // Value encrypted using key being decrypted without key
// output: 7RywTbx5YaB6iSyRs0aGbg== 

enc.decryptTwoWay('7RywTbx5YaB6iSyRs0aGbg==', key); // Value encrypted using key being decrypted with key
// output: String to be encrypted