security.js RSA加密與java客戶端解密
在通常的http協議的網站中直接提交資料可以透過資訊抓取從而暴露提交者所提交的資訊,(伍子胥:l47可181O微51l3可微) 特別是註冊時的密碼和登入時的密碼容易被洩露。那麼怎麼防止這種現象呢?很多人會想到加密技術,對沒錯,本文所講的就是使用rsa非對稱加密技術進行資料提交,由客戶獲取後臺所產生的公鑰對提交欄位進行加密,使用者提交後再由後臺所產生的私鑰進行解密。這裡以使用者登入時對使用者密碼進行加密為列,下面直接上程式碼:
前端js程式碼:
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/security.js"></script>
<script type="text/javascript">
$(function(){
$('#subt').click(function(){
var name = jQuery('#loginName').val();
var password =jQuery('#loginPwd').val();
if(name==null||name==""){
alert("使用者名稱不得為空!");
return;
}
if(password==null||password==""){
alert("密碼不得為空!");
return;
}
jQuery.ajax({
type:"post",
url:"loginset",
success:function(rd){
if(rd!=null){
//加密模
var Modulus = rd.split(';')[0];
//公鑰指數
var public_exponent = rd.split(';')[1];
//透過模和公鑰引數獲取公鑰
var key = new RSAUtils.getKeyPair(private_exponent, "", Modulus);
//顛倒密碼的順序,要不然後解密後會發現密碼順序是反的
var reversedPwd = password.split("").reverse().join("");
//對密碼進行加密傳輸
var encrypedPwd = RSAUtils.encryptedString(key,reversedPwd);
jQuery('#subPwd').val(encrypedPwd);
jQuery('#loginPwd').val("");
jQuery('#login').submit();
}
}
})
})
})
</script>
前端html程式碼:
<div style="text-align: center;">
<form id="login" action="login" method="post">
<input type="hidden" id="subPwd" name="subPwd" />
<table align="center">
<tr>
<td>登入</td>
</tr>
<tr>
<td>使用者名稱:<input type="text" id="loginName" name="loginName" /></td>
</tr>
<tr>
<td>密 碼:<input type="password" id="loginPwd" name="loginPwd" /></td>
</tr>
<tr>
<td><input id="subt" type="button" value="登入" /></td>
</tr>
</table>
</form>
</div>
後臺java產生RSA加密引數程式碼:
RSAUtils rsa = new RSAUtils();
//生成公鑰和金鑰
Map<String,Object> keyMap = rsa.createKey();
RSAPublicKey publicKey = (RSAPublicKey) keyMap.get("publicKey");
RSAPrivateKey privateKey = (RSAPrivateKey) keyMap.get("privateKey");
//js透過模和公鑰指數獲取公鑰對字串進行加密,注意必須轉為16進位制
//模
String Modulus = publicKey.getModulus().toString(16);
//公鑰指數
String Exponent = publicKey.getPublicExponent().toString(16);
//私鑰指數
String private_exponent = privateKey.getPrivateExponent().toString();
HttpSession session = request.getSession();
//java中的模和私鑰指數不需要轉16進位制,但是js中的需要轉換為16進位制
session.setAttribute("Modulus",publicKey.getModulus().toString());
session.setAttribute("private_exponent",private_exponent);
String strSet = Modulus+";"+Exponent;
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.write(strSet);
out.flush();
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69926583/viewspace-2683527/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RSA加密與解密加密解密
- 客戶端加解密客戶端解密
- iOS端基於RSA公鑰加密和解密iOS加密解密
- java RSA 解密Java解密
- php rsa長文加密解密PHP加密解密
- RSA 非對稱加密&解密加密解密
- RSA加密解密示例程式碼加密解密
- C#通過java生成的RSA公鑰加密和解密C#Java加密解密
- java websocket 客戶端JavaWeb客戶端
- 如何開啟客戶端加密特性客戶端加密
- RSA加密解密(無資料大小限制,php、go、java互通實現)加密解密PHPGoJava
- Java之RSA加解密解析Java解密
- Zookeeper Java 客戶端搭建Java客戶端
- [Redis 客戶端整合] Java 中常用Redis客戶端比較Redis客戶端Java
- 26.RSA加密解密在Java專案中的簡單應用加密解密Java
- 前後端java+vue 實現rsa 加解密與摘要簽名演算法後端JavaVue解密演算法
- RSA加密解密原理深度剖析(附CTF中RSA題型實戰分析)加密解密
- 使用Java加密與解密實現步驟Java加密解密
- zookeeper的Java客戶端APIJava客戶端API
- 在VUE中使用RSA加密解密加簽解籤Vue加密解密
- JavaScript前端和Java後端的AES加密和解密JavaScript前端後端加密解密
- Socket最簡單的客戶端與服務端通訊-Java客戶端服務端Java
- Java的oauth2.0 服務端與客戶端的實現JavaOAuth服務端客戶端
- Java加密解密瞭解Java加密解密
- Java與WCF互動(一):Java客戶端呼叫WCF服務 (轉)Java客戶端
- [jaeger] 二、客戶端使用 (Java版本)客戶端Java
- Redis的Java客戶端比較:絕地武士與生菜RedisJava客戶端
- SHA-256加密簡單例項(客戶端、服務端)加密單例客戶端服務端
- Android、Java RSA加密踩坑記AndroidJava加密
- 影像的加密與解密加密解密
- 前後端API互動資料加密——AES與RSA混合加密完整例項後端API加密
- php與ethereum客戶端互動PHP客戶端
- Java HTTP 客戶端的比較 - reflectoringJavaHTTP客戶端
- Tars-Java客戶端原始碼分析Java客戶端原始碼
- RSA加密加密
- RSA der加密 p12解密以及配合AES使用詳解加密解密
- RSA 非對稱加密&解密,超長字串分塊處理加密解密字串
- 利用RSA對前後端加密的探索後端加密