用JS方法加密URL

JavaScript017

用JS方法加密URL,第1张

首先,很不推荐你使用get方式发送密码,最好是使用post.

原因是,你通过一个连接把用户名和密码发送到后台,即便密码不是明文,别人获取不到密码明文,但是,只要你这个连接成功登陆过,别人就可以拿这个连接到处登陆.密码明文加密完全形同虚设.

如果非想使用get方式发送,我可以给你个思路,就是表单附带发送令牌,这个令牌是表单内的隐藏域,后台里对每一个时刻都不同的字符串做单向加密然后保存SESSION会话,一般使用md5方式,然后表单页面隐藏域写出该SESSION的值.发送表单的时候,附带令牌一起发送,(在url形式中就是多了一个参数),后台验证令牌是否是保存过的SESSION值,如果是,执行登陆,如果不是,就报错.

不管令牌是不是正确的,你都需要在每次生成页面时重新更新一次令牌并输出,这样才能保证唯一性.

然后你可以使用js版的md5把密码处理成加密字符串.

这样可以躲过部分不熟悉html的,但是如果他懂html,只需查看html的令牌,然后自己去组成url,那么照样还是不行.

所以,这种形式仍是不可取的,正宗的方式就是post发送用户名和密码,或是ajax的get方式发送.

加密参数是jsp参数传递中的一种安全措施,加密方法如下:

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

加密算法如下:

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 = 0i <8i++) {

salt[i] = digest[i]

}

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

SecretKeyFactory keyFactory = SecretKeyFactory

.getInstance("PBEWithMD5AndDES")

SecretKey skey = keyFactory.generateSecret(pbeKeySpec)

PBEParameterSpec paramSpec = new PBEParameterSpec(salt, ITERATIONS)

Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES")

cipher.init(Cipher.ENCRYPT_MODE, skey, paramSpec)

byte[] cipherText = cipher.doFinal(plainText.getBytes())

String saltString = new String(Base64.encode(salt))

String ciphertextString = new String(Base64.encode(cipherText))

return saltString + ciphertextString

} catch (Exception e) {

throw new Exception("Encrypt Text Error:" + e.getMessage(), e)

}

使用方法:

把jsp?后面的参数作为参数传入encrypt()然后就可以返回加密串了。

数字的话可以使用 Base62 算法,不过这只是表面的转换,因为算法是写在Js里的,稍加分析就能知道怎么去翻转。

如果要有效加密的话,可以使用js调用RSA算法进行加密,这样js中只会暴露公钥,可以实现安全的加密。

网上多得很。