- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
url加密解密完整解决方案
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.*的,我们在这个例子里将使用ernet.MimeUtility自带的base64编码工具。
需要引入activation.jar和mail.jar两个包。 下面是具体的实现:
import ernet.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
文档评论(0)