`

RSA加密

 
阅读更多

RSA加密案例

 

public class EcosystemAction extends BaseAction{

 

private static Logger logger = Logger.getLogger(EcosystemAction.class);

private static final long serialVersionUID = 1L;

//加密密钥

private static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIOQecuF0/5OcP8615TDHlgOa+CB SSUM3R8qvHgA3gFkT7lzV6MYbST11Pf/xJ0vS4ka7rqvt+w7+qResi+ww2oKfFnnANlXJZhpAZoF RrM6MWsBipt7VwCFaW1E9XkJRsnCzCyJsykt6HerQFKcPOay1PMWOowKfYPZ1bsGKlalAgMBAAEC gYBLa82GkQfAp7M7fb4Md/azQEEziKon5UH2FgfJO6YJYjoZ9DdvNheLsqoOKb/K5EwHIztsJkPn 11KOXAMGN+0tzfDyOWnDYem1TXVMv/4hAUhWfsyfwemdRRBNDyhwkcnT/H++wl8ULyl3tcGc792D ukkZesIfwOyIS5uB5Fr4wQJBANgEvbzXbTA+A7LG9Qa60SLzRrgV/RBVv/1Eca9HOYL8hpXh1GyU PTYyXtQJiN3ol2kXdth/biGWCgHlTO9bWR0CQQCb6i24xx55pVBVLkTatnMtZ/sb/DnompXIhotE a8JuvQZBrCpISAwEz2JsR9F13eLWsBc38RfrhNC4a1DwoYUpAkB1dE5+SVwTKQT1xfwghp+EM2a2 XS5WHWngmcB+n2mD8S50fG/2AbwupcCt5elHT1pUR+/U06TcGiqi0Ty9wJt5AkBR/lA3KTgEnwRl F2UMZACkM1eiOv21Ln5wqxjYTZc9p1h/9utxgboYWXuYGBi2VI7zej1rpPWAXSNqqL0zHq4pAkEA vubjdgB6tigP8OdtJ8wYrXFtyQD8eqU0n+GJwBiq3XCB+tWWBdSn66TfjtWC9J7JfUGocLdhd6E7GV+r4s2opg==";

public String doDefault(){

HttpServletRequest request = getRequest();

String skipurl = request.getParameter("url");

 

RoleService roleService = (RoleService) getService(RoleService.class);

 

//UM账号

String um = getString(Constants.ADMIN_UID, getSession());

 

String userid = getString(Constants.ADMIN_USER_ID,getSession());

//姓名

String xm = getString(Constants.ADMIN_USER_NAME, getSession());

//session有效期

int sessionDeadline = 120;

//登录时间

long timestamp = System.currentTimeMillis();

 

//菜单权限

List role = roleService.findRoleByUserId(userid);

 

UserInfo userInfo = new UserInfo(um, xm, sessionDeadline, timestamp, role);

 

String param = new Gson().toJson(userInfo);

try {

//私钥加密

byte[] encryStrbyte = RSAUtils.encryptByPrivateKey(param.getBytes(), privateKey);

String encryStr = RSAUtils.encryptBASE64(encryStrbyte);

//签名

String sign = URLEncoder.encode(RSAUtils.sign(encryStrbyte, privateKey),"UTF-8");

//参数

String reqparam = URLEncoder.encode(encryStr, "UTF-8");

logger.info(reqparam);

getResponse().sendRedirect(skipurl+"?reqparam="+reqparam+"&sign="+sign);

} catch (Exception e) {

logger.info("参数加密失败");

e.printStackTrace();

}

return null;

}

 

    public static String getString(String name, HttpSession session)

    {

        Object value = session.getAttribute(name);

        if (value == null)

        {

            return "";

        }

        return value.toString().trim();

    }

 

}

 

RSA加解密大致过程:

加密:由密钥对参数的二进制进行加密,同时根据二进制数据生成签名,然后进一步对二进制数据进行BASE64加密。

解密:获取参数,对参数进行BASE64解密,由签名对应的密钥对解密后的数据进行验证,验证通过后再经对应的密钥去解密数据。

 

密钥可由RSAUtis自动生成一对公钥和私钥,工具类见jar包

附件jar是自己写的过滤器,用来解密及存取参。demo自己研究,就是一个使用的过程,其中工具类做了转位操作,为防止参数过长加解密失败

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics