項目中做雲桌面對接,需要在項目中查出用戶的明文密碼,拼接到雲桌面登陸地址中,防止明文傳輸,做了base64加密解密,防止小白黑客盜取用戶密碼。
postgrelsql base64加密SQL語句:
查詢用戶證件號碼后四位,base64加密的密碼
SELECT substr(idno, length(idno) - 3) idno, ENCODE(cast(password as bytea),'base64') xm FROM security.oauth_user WHERE id = #{USERPK}
JS代碼:
模擬post請求,雲桌面需要Post請求模擬登陸,其他系統以get方式
/* *功能: 模擬form表單的提交 *參數: URL 跳轉地址 * PARAMTERS 參數 * METHOD post或者get */ function postUrl(URL, PARAMTERS,METHOD) { //創建form表單 var temp_form = document.createElement("form"); temp_form.action = URL; //如需打開新窗口,form的target屬性要設置為'_blank' temp_form.target = "_blank"; temp_form.method = METHOD; temp_form.style.display = "none"; //添加參數 for (var item in PARAMTERS) { var opt = document.createElement("textarea"); opt.name = PARAMTERS[item].name; opt.value = PARAMTERS[item].value; temp_form.appendChild(opt); } document.body.appendChild(temp_form); //提交數據 temp_form.submit(); }
//打開APP鏈接 $scope.openUrl = function(app){ var parames = new Array(); var method = "get"; if(app.name == "雲桌面" || app.id == "ebe6132d-cbcc-4349-aa36-5810fa55c048"){ var username = $scope.userInfo.pinyin + $scope.userInfo.idno; var pwd = window.atob($scope.userInfo.pwd); parames.push({ name: "login", value: username}); parames.push({ name: "passwd", value: pwd}); method = "post"; } postUrl(app.url, parames,method); }
補充:
從IE10+瀏覽器開始,所有瀏覽器就原生提供了Base64編碼、解碼方法,不僅可以用於瀏覽器環境,Service Worker環境也可以使用。
方法名就是 atob 和 btoa ,具體語法如下:
window.btoa('china is so nb') // 編碼 "Y2hpbmEgaXMgc28gbmI=" window.atob("Y2hpbmEgaXMgc28gbmI=") // 解碼 "china is so nb"
開源的base64.js(https://github.com/dankogai/js-base64) ,使用很簡單,瀏覽器引入該JS文件,然后Base64編碼這樣:
Base64.encode('china is so nb'); // 編碼 "Y2hpbmEgaXMgc28gbmI=" Base64.decode("Y2hpbmEgaXMgc28gbmI="); // 解碼 'china is so nb'