URL加密解密完整解决方案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

URL加密解密完整解决方案

采用:

.URLEncoder.encode(Base64编码(加密字串), StringCode) 这样的方法来对url中的参数进行加密。

首先我们先说一下如何加密。

一、算法的选择:

对于像对url中的参数进行加密的过程,我不建议使用rsa或者是三重des这样的加密算法,主要原因在于性能和速度会受影响。

我建议大家使用对称加密如:DES或者是PBE算法。

我们在这边就使用PBEWithMD5AndDES来实现加密。

二、加密原理

对于一个纯文本,加密后它会变成一堆乱码,这堆乱码包括了许多非法字符,我们不希望把这些字符放入bean中,因此在加密完后,我们还要对加密结果进行base64编码。

PBE从字面上理解,它必须使用一个口令,我们不希望我们的加密过于复杂而影响页面跳转的速度,因此我们不采用口令+KEY的形式,我们这边的口令就是我们的KEY。

因此:

我们的整个加密过程实现如下:

输入口令(KEY)--> 加密文本 --> 以base64对加密后的结果进行编码-->以

.URLEncoder.encode编码成浏览器可以识别的形式-->传输给接受的action

而解密过程如下:

接受的action得到参数-->以base64对结果进行解码-->得到纯加密文本-->解密-->得到解密后的值

三、BASE64

这边对于BASE64的原理不多说了,只说实现,目前网上有很多实现方式,有自己写的,有用sun.misc.*的,我们在这个例子里将使用javax.mail.internet.MimeUtility自带的base64编码工具。

需要引入activation.jar和mail.jar两个包。下面是具体的实现:

import javax.mail.internet.MimeUtility;

public class Base64 {

public static byte[] encode(byte[] b) throws Exception {

ByteArrayOutputStream baos = null;

OutputStream b64os = null;

try {

baos = new ByteArrayOutputStream();

b64os = MimeUtility.encode(baos, "base64");

b64os.write(b);

b64os.close();

return baos.toByteArray();

} catch (Exception e) {

throw new Exception(e);

} finally {

try {

if (baos != null) {

baos.close();

baos = null;

}

} catch (Exception e) {

}

try {

if (b64os != null) {

b64os.close();

b64os = null;

}

} catch (Exception e) {

}

}

}

public static byte[] decode(byte[] b) throws Exception { ByteArrayInputStream bais = null;

InputStream b64is = null;

try {

bais = new ByteArrayInputStream(b);

b64is = MimeUtility.decode(bais, "base64");

byte[] tmp = new byte[b.length];

int n = b64is.read(tmp);

byte[] res = new byte[n];

System.arraycopy(tmp, 0, res, 0, n);

return res;

} catch (Exception e) {

throw new Exception(e);

} finally {

try {

if (bais != null) {

bais.close();

bais = null;

}

} catch (Exception e) {

}

try {

if (b64is != null) {

b64is.close();

b64is = null;

}

} catch (Exception e) {

}

}

}

}

四、加密解密工具类的实现

有了BASE64的工具类,下面的工作将变得简单了,编写我们的加密解密工具类吧:

import java.io.DataOutputStream;

import java.io.FileOutputStream;

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

import java.util.*;

import mons.logging.Log;

import mons.logging.LogFactory;

public class SecurityHelper {

protected final static Log logger = LogFactory.getLog(SecurityHelper.class);

private final static int ITERATIONS = 20;

public static String encrypt(String key, String plainText) throws Exception {

String encryptTxt = "";

try {

byte[] salt = new byte[8];

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(key.getBytes());

byte[] digest = md.digest();

for (int i = 0; i < 8; i++) {

salt[i] = digest[i];

}

PBEKeySpec pbeKeySpec = new PBEKeySpec(key.toCharArray());

相关文档
最新文档