⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blowfish.js

📁 OA系统实现以下功能: a、个人办公,我的办公桌 b、公文管理 c、工作流程 d、组织管理 e. 权限管理
💻 JS
📖 第 1 页 / 共 2 页
字号:
		for (var i = 0; i < l; ) {			var t = tab.indexOf(s[i++]) << 18 | tab.indexOf(s[i++]) << 12 | tab.indexOf(s[i++]) << 6 | tab.indexOf(s[i++]);			out.push((t >>> 16) & 255);			out.push((t >>> 8) & 255);			out.push(t & 255);		}		return out;	}	this.getIV = function (outputType) {		var out = outputType || dojo.crypto.outputTypes.Base64;		switch (out) {		  case dojo.crypto.outputTypes.Hex:			var s = [];			for (var i = 0; i < iv.length; i++) {				s.push((iv[i]).toString(16));			}			return s.join("");		  case dojo.crypto.outputTypes.String:			return iv.join("");		  case dojo.crypto.outputTypes.Raw:			return iv;		  default:			return toBase64(iv);		}	};	this.setIV = function (data, inputType) {		var ip = inputType || dojo.crypto.outputTypes.Base64;		var ba = null;		switch (ip) {		  case dojo.crypto.outputTypes.String:			ba = [];			for (var i = 0; i < data.length; i++) {				ba.push(data.charCodeAt(i));			}			break;		  case dojo.crypto.outputTypes.Hex:			ba = [];			var i = 0;			while (i + 1 < data.length) {				ba.push(parseInt(data.substr(i, 2), 16));				i += 2;			}			break;		  case dojo.crypto.outputTypes.Raw:			ba = data;			break;		  default:			ba = fromBase64(data);			break;		}		iv = {};		iv.left = ba[0] * POW24 | ba[1] * POW16 | ba[2] * POW8 | ba[3];		iv.right = ba[4] * POW24 | ba[5] * POW16 | ba[6] * POW8 | ba[7];	};	this.encrypt = function (plaintext, key, ao) {		var out = dojo.crypto.outputTypes.Base64;		var mode = dojo.crypto.cipherModes.EBC;		if (ao) {			if (ao.outputType) {				out = ao.outputType;			}			if (ao.cipherMode) {				mode = ao.cipherMode;			}		}		var bx = init(key);		var padding = 8 - (plaintext.length & 7);		for (var i = 0; i < padding; i++) {			plaintext += String.fromCharCode(padding);		}		var cipher = [];		var count = plaintext.length >> 3;		var pos = 0;		var o = {};		var isCBC = (mode == dojo.crypto.cipherModes.CBC);		var vector = {left:iv.left || null, right:iv.right || null};		for (var i = 0; i < count; i++) {			o.left = plaintext.charCodeAt(pos) * POW24 | plaintext.charCodeAt(pos + 1) * POW16 | plaintext.charCodeAt(pos + 2) * POW8 | plaintext.charCodeAt(pos + 3);			o.right = plaintext.charCodeAt(pos + 4) * POW24 | plaintext.charCodeAt(pos + 5) * POW16 | plaintext.charCodeAt(pos + 6) * POW8 | plaintext.charCodeAt(pos + 7);			if (isCBC) {				o.left = xor(o.left, vector.left);				o.right = xor(o.right, vector.right);			}			eb(o, bx);			if (isCBC) {				vector.left = o.left;				vector.right = o.right;				dojo.crypto.outputTypes.Hex;			}			cipher.push((o.left >> 24) & 255);			cipher.push((o.left >> 16) & 255);			cipher.push((o.left >> 8) & 255);			cipher.push(o.left & 255);			cipher.push((o.right >> 24) & 255);			cipher.push((o.right >> 16) & 255);			cipher.push((o.right >> 8) & 255);			cipher.push(o.right & 255);			pos += 8;		}		switch (out) {		  case dojo.crypto.outputTypes.Hex:			var s = [];			for (var i = 0; i < cipher.length; i++) {				s.push((cipher[i]).toString(16));			}			return s.join("");		  case dojo.crypto.outputTypes.String:			return cipher.join("");		  case dojo.crypto.outputTypes.Raw:			return cipher;		  default:			return toBase64(cipher);		}	};	this.decrypt = function (ciphertext, key, ao) {		var ip = dojo.crypto.outputTypes.Base64;		var mode = dojo.crypto.cipherModes.EBC;		if (ao) {			if (ao.outputType) {				ip = ao.outputType;			}			if (ao.cipherMode) {				mode = ao.cipherMode;			}		}		var bx = init(key);		var pt = [];		var c = null;		switch (ip) {		  case dojo.crypto.outputTypes.Hex:			c = [];			var i = 0;			while (i + 1 < ciphertext.length) {				c.push(parseInt(ciphertext.substr(i, 2), 16));				i += 2;			}			break;		  case dojo.crypto.outputTypes.String:			c = [];			for (var i = 0; i < ciphertext.length; i++) {				c.push(ciphertext.charCodeAt(i));			}			break;		  case dojo.crypto.outputTypes.Raw:			c = ciphertext;			break;		  default:			c = fromBase64(ciphertext);			break;		}		var count = c.length >> 3;		var pos = 0;		var o = {};		var isCBC = (mode == dojo.crypto.cipherModes.CBC);		var vector = {left:iv.left || null, right:iv.right || null};		for (var i = 0; i < count; i++) {			o.left = c[pos] * POW24 | c[pos + 1] * POW16 | c[pos + 2] * POW8 | c[pos + 3];			o.right = c[pos + 4] * POW24 | c[pos + 5] * POW16 | c[pos + 6] * POW8 | c[pos + 7];			if (isCBC) {				var left = o.left;				var right = o.right;			}			db(o, bx);			if (isCBC) {				o.left = xor(o.left, vector.left);				o.right = xor(o.right, vector.right);				vector.left = left;				vector.right = right;			}			pt.push((o.left >> 24) & 255);			pt.push((o.left >> 16) & 255);			pt.push((o.left >> 8) & 255);			pt.push(o.left & 255);			pt.push((o.right >> 24) & 255);			pt.push((o.right >> 16) & 255);			pt.push((o.right >> 8) & 255);			pt.push(o.right & 255);			pos += 8;		}		if (pt[pt.length - 1] == pt[pt.length - 2] || pt[pt.length - 1] == 1) {			var n = pt[pt.length - 1];			pt.splice(pt.length - n, n);		}		for (var i = 0; i < pt.length; i++) {			pt[i] = String.fromCharCode(pt[i]);		}		return pt.join("");	};	this.setIV("0000000000000000", dojo.crypto.outputTypes.Hex);}();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -