111 lines
3.8 KiB
JavaScript
111 lines
3.8 KiB
JavaScript
define(function(require, exports, module) {
|
|
var _oCommon, _oUtils, _oBase64;
|
|
|
|
require("websdk");
|
|
_oCommon = require("common");
|
|
_oUtils = require("utils");
|
|
_oBase64 = require("base64");
|
|
|
|
function EncryptionFac () {}
|
|
|
|
EncryptionFac.prototype.encrypt = function (oStr, iRSABits, bBase64Encrypted, cbFun) {
|
|
//var that = this;
|
|
var iBits = 1024;
|
|
|
|
if (iRSABits) {
|
|
iBits = iRSABits;
|
|
}
|
|
|
|
var szPassPhrase = new Date() + "",
|
|
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
|
|
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
|
|
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
|
|
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
|
|
|
|
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
|
|
cmd: "challenge",
|
|
type: "POST",
|
|
data: oXmlDoc,
|
|
success: function (status, xmlDoc) {
|
|
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
|
|
if(szDecryptionResult.plaintext != null) {
|
|
var szKey,szEncryptPassword;
|
|
var aResult = [];
|
|
if (iBits === 256) {
|
|
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
|
|
} else {
|
|
szKey = szDecryptionResult.plaintext;
|
|
}
|
|
|
|
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
|
|
|
|
if("function" === typeof cbFun) {
|
|
if("string" === typeof oStr) {
|
|
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
|
|
cbFun( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
|
|
} else if("[object Array]" === Object.prototype.toString.call(oStr)) {
|
|
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
|
|
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
|
|
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
|
|
aResult.push( _oBase64.encode(szTemp) );
|
|
}
|
|
cbFun(aResult);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
EncryptionFac.prototype.encryptSync = function (oStr, iRSABits, bBase64Encrypted) {
|
|
//var that = this;
|
|
var iBits = 1024;
|
|
var aResult = [];
|
|
|
|
if (iRSABits) {
|
|
iBits = iRSABits;
|
|
}
|
|
|
|
var szPassPhrase = new Date() + "",
|
|
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
|
|
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
|
|
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
|
|
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
|
|
|
|
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
|
|
cmd: "challenge",
|
|
type: "POST",
|
|
async: false,
|
|
data: oXmlDoc,
|
|
success: function (status, xmlDoc) {
|
|
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
|
|
if(szDecryptionResult.plaintext != null) {
|
|
var szKey, szEncryptPassword;
|
|
if (iBits === 256) {
|
|
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
|
|
} else {
|
|
szKey = szDecryptionResult.plaintext;
|
|
}
|
|
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
|
|
if("string" === typeof oStr) {
|
|
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
|
|
aResult.push( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
|
|
} else {
|
|
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
|
|
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
|
|
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
|
|
aResult.push( _oBase64.encode(szTemp) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
if("string" === typeof oStr) {
|
|
return aResult[0];
|
|
} else {
|
|
return aResult;
|
|
}
|
|
};
|
|
|
|
module.exports = new EncryptionFac();
|
|
}); |