`

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();
                }
            }
        }
    }
}
分享到:
评论

相关推荐

    java加密解密工具

    Java加密解密工具是开发过程中不可或缺的部分,尤其是在处理敏感数据时,确保数据的安全性至关重要。在Java中,我们可以使用各种库和内置API来实现加密和解密操作。本篇文章将深入探讨Java加密解密的核心概念、常用...

    java加密和解密的方法

    java加密和解密的方法,利用指定的密钥,可逆的。密钥必须16位。

    JAVA数据加密解密的实例

    本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不可读信息)的过程,以保护数据不被未经授权的用户访问。解密则是加密的逆过程,将...

    JCT - java加密解密工具包.zip_Java加密_java 加密_jct java_加密 解密_加密工具

    Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...

    java加密解密zip压缩包

    在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...

    java加密解密代码

    一段java语言加密和解密的代码

    很强的Java加密解密算法源码.zip

    在这个"很强的Java加密解密算法源码.zip"中,我们可以深入学习如何在Java中实现3DES算法来加密和解密文件。 3DES算法是一种块加密算法,它通过三次应用DES密钥来增强安全性。基本流程如下: 1. **加密过程**:输入...

    java实现文件加密解密

    "java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...

    JAVA加密和解密的艺术(第二版).zip

    《JAVA加密和解密的艺术(第二版)》PDF版本(JAVA加密与解密的艺术--第2版.pdf)确保了读者可以随时随地学习,同时结合源代码,使得理论学习与实践操作相结合,更有利于技能的提升。 总的来说,这本书是Java开发者...

    Java实现的RSA加密解密算法示例

    Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...

    java加密解密程序

    总结起来,这个Java加密解密程序提供了一个了解基本加密概念的起点,但对于实际的数据保护,我们需要依赖更为复杂的算法和安全策略。学习和理解这些基础知识对进一步深入研究加密和网络安全至关重要。

    排列码java实现,密码加密解密

    通过对代码的学习,你可以理解作者如何使用Java语言实现排列码加密和解密,并且可以根据实际需求进行修改或扩展。 总之,排列码在Java中的实现涉及到编码规则的生成、数据的预处理和后处理,以及核心的编码和解码...

    Java加密解密

    本文将深入探讨Java中的加密解密技术,基于提供的文件`PasswordUtil.java`和`DecryptAndEncryptUtil.java`,我们可以推测这两个文件包含了用于密码处理和数据加解密的实用工具类。 首先,Java提供了内置的`java....

    java 加密解密 软件 c c++ 纯净版

    1. **Java加密解密**:Java提供了丰富的库,如Java Cryptography Extension (JCE),用于实现各种加密和解密算法,如AES(高级加密标准)、DES(数据加密标准)、RSA(公钥加密算法)等。这些算法可以用于对数据进行...

    SM4国密加密解密JAVA代码实现.zip

    SMS4国密JAVA加密解密完整代码,无异常java类文件,导入即用。Convert.java 内部字符串进制转换类,SMS4.java 国密加密解密处理方法类。TestMain.java 测试类,调用 encrypt 加密 decode 解密

    JS前台加密,java后台解密实现

    1. **Java解密**:接收到加密数据后,服务器端使用对应的解密算法和密钥进行解密。如果是AES,可以使用`javax.crypto.Cipher`类来解密;如果是RSA,需要使用`java.security.PrivateKey`来解密用公钥加密的数据。 2....

    JAVA加密解密

    总结来说,Java加密解密涵盖了对称和非对称加密算法,以及哈希函数,它们在保护数据安全、实现数字签名等方面起着关键作用。通过学习和实践,开发者可以掌握如何在Java项目中有效地应用这些技术,以确保信息的安全...

    java和javascript之间的DES加密解密

    Java和JavaScript之间的DES加密解密是...总结来说,Java和JavaScript之间的DES加密解密涉及了对称加密原理、密钥管理、跨平台的互操作以及安全实践。理解和掌握这些知识点对于进行安全的网络通信和数据保护至关重要。

Global site tag (gtag.js) - Google Analytics