/** * 加密算法:将密码的char与秘钥的MD5的char相加,并转换为base64字符串。 (因为key的细微变化都会使MD5几乎完全不同,所以传输保密性更好,此处不必考虑存储保密性) * (可惜此方法不太适合前端,但一时又找不出更兼容的方法,查了一下好像前端加密更麻烦更复杂一些) * * @param pass 要加密的密码,不能有中文,长度应小于32位 * @param key 秘钥(建议使用时间作为秘钥) * @return 加密后的密码,长度128位 */ public static String encodePass(String pass, String key) { if (pass.length() > 32) return ""; String md5key = getMD5(key); // 加长秘钥 String result = ""; BigInteger big_pass = toNumber(pass); BigInteger big_key = toNumber(md5key); BigInteger big_result = big_pass.add(big_key); // 相加 result = big_result.toString(); result = Base64Coder.encodeString(result); // 编码 return result; }
/** * 解密算法:将base64字符串解析然后减去秘钥的MD5的char,得到密码的char并转换为密码。 * * @param pass 已加密的密码 * @param key 加密时用的秘钥 * @return 解密后的密码 */ public static String decodePass(String pass, String key) { String md5key = getMD5(key); // 加长秘钥 String result = ""; String str_result = ""; try { str_result = Base64Coder.decodeString(pass); // 解码 } catch (Exception e) { return ""; } BigInteger big_result = toBigInteger(str_result); BigInteger big_key = toNumber(md5key); BigInteger big_pass = big_result.subtract(big_key); // 作差 result = toString(big_pass); return result; }