java请求参数如何加密_对request请求参数加密

原理:

1. 对原始参数名加前辍标示为加密参数名,传输前对其参数值加密。

2. 获取时,先检查原始名称是否存在,如果不存在则查找是否有加密前辍的参数名,并对其解密。

public class RequestUtil {

/**安全名称前辍*/

public static final String SAFE_PREFIX = "__";

/**

* 转换为安全参数名称

* @param name

* @return

*/

static

public String toSafeParamName(String name){

if(null==name || "".equals(name)){

throw new NullPointerException("name is null");

}

return SAFE_PREFIX+name;

}

/**

* 转换为一个安全的字符串参数

* @param value

* @param eKey 密钥

* @return

*/

static

public String toSafeStrParam(String value, String eKey){

return null!=value? DesUtil.encode(value, eKey): value;

}

/**

* 还原(安全转换过的)字符串

* @param value

* @param eKey

* @return

*/

static

public String recoveryStr(String value, String eKey){

if(null != value && value.length()>2){

return DesUtil.decode(value, eKey);

}

return value;

}

/**

* 获取请求字符串参数

* 依parameter-attribute-session序查找

* @param request

* @param name 如果在参数中找不到name的参数,则尝试找SAFE_PREFIX+name

* @param eKey 密钥

* @return

*/

static

public String getRequestStrParam(HttpServletRequest request, String name, String eKey){

String name$ = SAFE_PREFIX+name;

String value=request.getParameter(name);

if(null == value){

value = request.getParameter(name$);

value = recoveryStr(value, eKey);

}

if(null == value){

if(null == (value=(String)request.getAttribute(name))){

value = (String)request.getAttribute(name$);

value = recoveryStr(value, eKey);

}

}

if(null == value){

HttpSession session = request.getSession();

if(null!=session){

if(null == (value=(String)session.getAttribute(name))){

value = (String)session.getAttribute(name$);

value = recoveryStr(value, eKey);

}

}

}

return value;

}

}

测试:

servlet(spring mvc)

@Controller

@RequestMapping("/t")

public class TestController {

static final String ENC_KEY = "..............";

@RequestMapping("test1")

@ResponseBody

public String test1(HttpServletRequest request){

String value = RequestUtil.getRequestStrParam(request, "name", ENC_KEY);

return value;

}

}

生成加密url

public class Test2 {

private static String ENC_KEY = "。。。。。。。。。。。。。";

@Test

public void t1(){

String req_name = "name";

String req_value = "Tom";

String url = String.format("http://127.0.0.1:8080/t/test1?%s=%s",

RequestUtil.toSafeParamName(req_name),

RequestUtil.toSafeStrParam(req_value, ENC_KEY));

System.out.println(url);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 JSP 中对登录时的 POST 请求参数进行 MD5 加密,可以使用以下代码: ```java <% String username = request.getParameter("username"); // 获取 username 参数值 String password = request.getParameter("password"); // 获取 password 参数值 String passwordMD5 = ""; // 用于存储加密后的密码 if (password != null && !password.equals("")) { // 将密码进行 MD5 加密 MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bytes = md5.digest(password.getBytes()); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02X", b)); } passwordMD5 = sb.toString(); } // 构造加密后的参数 String encryptedUsername = java.net.URLEncoder.encode(username, "UTF-8"); String encryptedPassword = java.net.URLEncoder.encode(passwordMD5, "UTF-8"); %> <form action="login.jsp" method="post"> <input type="text" name="username" value="<%=encryptedUsername%>"> <input type="password" name="password" value="<%=encryptedPassword%>"> <input type="submit" value="登录"> </form> ``` 其中,`request.getParameter("username")` 和 `request.getParameter("password")` 用于获取 POST 请求中的用户名和密码参数值,将密码进行 MD5 加密的代码与上面的例子相同,不再赘述。然后,构造加密后的参数值,使用 `java.net.URLEncoder.encode` 方法进行 URL 编码。 最后,将加密后的参数值设置到表单的输入框中,用户提交表单时,将会提交加密后的参数。在服务器端接收到请求后,需要对参数进行解密和校验,确保用户名和密码的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值