public class UmsEncryptUtil { private static final Logger logger = LoggerFactory.getLogger(UmsEncryptUtil.class); public static final String KEYPATH = SysProService.getProValue("ums_private_trans_keyPath"); /** * 加密 * @param content * @param certPath * @return * @throws Exception */ public static byte[] encrypt(String content,String certPath) throws Exception { PublicKey publicKey = getPublicKeyFromX509(certPath); Cipher c = Cipher.getInstance(publicKey.getAlgorithm()); c.init(Cipher.ENCRYPT_MODE, publicKey); byte[] result = c.doFinal(content.getBytes("UTF-8")); return result; } /** * 解密 * @param content * @param pfxPath * @param pwd * @return * @throws Exception */ public static String decrypt(byte[] content,String pfxPath,String pwd) throws Exception { PrivateKey privateKey = getPrivateKeyFromX509(pfxPath, pwd); Cipher c = Cipher.getInstance(privateKey.getAlgorithm()); c.init(Cipher.DECRYPT_MODE, privateKey); byte[] result = c.doFinal(content); return new String(result,"UTF-8"); } /** * 签名方法 * * @author 2016.12.30 * @param param * @return * @throws Exception */ public static String createSignForUmsPrivateTrans(Map<String, String> param) throws Exception { StringBuffer signData = new StringBuffer(); for (Entry<String, String> entry : param.entrySet()) { signData.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } //加签 String signDataStr = signData.substring(0, signData.length() - 1); logger.debug("签名串:{}",signDataStr); //#加密Key密码 String pass = SysProService.getProValue("ums_private_trans_keyPass"); PrivateKey privateKey = getPrivateKeyFromX509(KEYPATH, pass);//"lxtrgryz"为私钥密码 String sign = signForUmsPrivateTrans(signDataStr.getBytes("UTF-8"), privateKey); param.put("sign", sign); logger.debug("签名:{}",sign); String request=MyJSONService.objectToJsonString(param); logger.debug("param:{}",signDataStr); return request; } /** * 签名(使用私钥签名) * @author 2016.12.30 * @param data * @param privateKey * @return * @throws Exception */ private static String signForUmsPrivateTrans(final byte[] data, final PrivateKey privateKey) throws Exception { final Signature st = Signature.getInstance("SHA1withRSA"); st.initSign(privateKey); st.update(data); byte[] signed = st.sign(); return Base64.encodeBase64String(signed); } /** * 二进制转字符串 * @param bytes * @return */ public static String formatToString(byte[] bytes) { StringBuilder str = new StringBuilder(); byte[] arrayOfByte = bytes; int j = bytes.length; for (int i = 0; i < j; i++) { byte b = arrayOfByte[i]; str.append(String.format("%02x ", new Object[] { Byte.valueOf(b) })); } if (str.length() > 0) { str.delete(str.length() - 1, str.length()); } return str.toString(); } /** * 字符串转二进制 * @param string * @return */ public static byte[] parseString(final String string) { final String[] strings = string.split(" "); final byte[] bytes = new byte[strings.length]; for (int i = 0; i < strings.length; i++) { bytes[i] = (byte) Integer.parseInt(strings[i], 16); } return bytes; } /** * 获取公钥KEY * @param certPath * @return * @throws Exception */ private static PublicKey getPublicKeyFromX509(String certPath) throws Exception { InputStream fin = null; try { fin = new FileInputStream(new File(certPath)); CertificateFactory f = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) f.generateCertificate(fin); PublicKey pk = certificate.getPublicKey(); return pk; }finally { if(fin!=null){ try { fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 获取私钥KEY * @param pfxPath * @param pwd * @return * @throws Exception */ private static PrivateKey getPrivateKeyFromX509(String pfxPath,String pwd) throws Exception { FileInputStream fin = null; try { fin = new FileInputStream(new File(pfxPath)); KeyStore inputKeyStore = KeyStore.getInstance("PKCS12"); inputKeyStore.load(fin,pwd.toCharArray()); Enumeration<String> aliasenum = inputKeyStore.aliases(); String keyAlias = null; if (aliasenum.hasMoreElements()) { keyAlias = aliasenum.nextElement(); } PrivateKey privateKey = (PrivateKey) inputKeyStore.getKey(keyAlias, pwd.toCharArray()); return privateKey; } finally { if(fin!=null){ try { fin.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
java加密解密学习总结
总结下java加密解密的方法,供以后参考:
猜你喜欢
转载自dong76880.iteye.com/blog/2382107
今日推荐
周排行