java加密解密学习总结

总结下java加密解密的方法,供以后参考:
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();
                }
            }
        }
    }
}

猜你喜欢

转载自dong76880.iteye.com/blog/2382107
今日推荐