今天,我来说说RSA加密, 什么是RSA加密?百度到的太多,而且术语太多,而且想一想不好让人理解,这里我就用我的话总结了,RSA加密是非对称加密分为公钥加密,私钥解密 和私钥加密,公钥解密,前者大多数出现在向后台发送敏感数据,比如最简单的账号,密码,试想一下,如果被人知道了你的账号和密码,那么别人就能为所欲为了,这可能给我们造成损失,这个不是我们希望看到的吧,当然有人会说我用的post提交的数据啊。其实在懂编程的人看来,post其实也不安全。
我认为get和post除了访问地址长度有别,其它的基本一样,我们都知道get提交参数的时候会把参数拼接到地址栏,get地址的访问长度不能太大,百度也不能确定它的极限是多少,但是get请求会把信息以明文的形式展示在地址栏,而post不会,可以这么理解get和post都可以看成一辆车,它们都能在车顶上放货物(车顶可以看成地址栏,货物就是参数了),也可以在车内放货物,只是多少的问题。大家在访问某个登录界面的时候不妨f12看看,不管是get还是post都没用,所有的参数都以明文的形式展示在那里。
接下来我举个小例子——jsp公钥加密java私钥解密 工具类直接复制到自己创建的类里就能使用了
首先在index.jsp加载跳转到tologin
<body onload="location='<%=path%>/tologin'">
@RequestMapping("/tologin")
public String tologin(){
return "login";
}
在login页面加入,记住jquery要在其他js之前
后三个js下载地址:http://www.ohdave.com/rsa
<script type="text/javascript" src="<%=path%>/reourceTool/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript" src="<%=path%>/reourceTool/js/Barrett.js"></script>
<script type="text/javascript" src="<%=path%>/reourceTool/js/BigInt.js"></script>
<script type="text/javascript" src="<%=path%>/reourceTool/js/RSA.js"></script>
页面就绪的时候就去后台获取公钥的参数
<script type="text/javascript">
$(function(){
$.post("<%=path%>/keyPair",{},function(data){
$("#exponent").val(data.exponent) /* 这里我将参数放到隐藏域里*/
$("#modulus").val(data.modulus)
},"json")
})
function Encrypt(){
var statu = false;
var exponent = $("#exponent").val()
var modulus = $("#modulus").val()
var username = $("#username").val()
var password = $("#password").val()
if (username.length != 256) {
setMaxDigits(130);
var publicKey = new RSAKeyPair(exponent, '', modulus);
var username = encryptedString(publicKey, encodeURIComponent(username));
$("#username").val(username); /*加密后重新赋值到input表单*/
}
if (password.length != 256) {
setMaxDigits(130);
var publicKey = new RSAKeyPair(exponent, '', modulus);
var password = encryptedString(publicKey, encodeURIComponent(password));
$("#password").val(password);
}
if(username.length>20&&password.length>20){
statu = true;
}
return statu;
}
</script>
<body>
<center>
<input type="text" id="exponent">
<input type="text" id="modulus">
<form id="login" action="<%=path%>/decryption" onsubmit="return Encrypt();"> /*这是表单提交之前执行的方法,返回true才会提交表单*/
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username" id="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" id="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="提交" ></td>
<td><input type="reset" value="重置"></td>
</tr>
</table>
</form>
</center>
</body>
建议不要用input的onblur方法,首先加密会延时一会儿,而且用户体验不好
后台工具类,注意jar包
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInte