java加密和解密

来源:互联网 发布:上知教育一个月多少钱 编辑:程序博客网 时间:2024/05/29 21:18

这里以RSA非对称加密算法为例,公钥和私钥是用文章java数字签名中的工具类生成

package cn.cjc.sign;import org.apache.commons.codec.binary.Base64;import org.junit.Test;import javax.crypto.Cipher;import java.net.URLDecoder;import java.net.URLEncoder;import java.security.KeyFactory;import java.security.PrivateKey;import java.security.PublicKey;import java.security.spec.KeySpec;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;/** * RSA加密和解密 * * @author chenjc * @since 2017-06-25 */public class EncryptAndDecryptUtil {    //生成的公钥    private String pubKeyStr = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9ZdB9JvyoO8EiDPomoO23Bqb4uUxqNRYwIe+Yr6iNgAAznhVPzcZbeiAF6CFuvX4fZhJaaPoiuK6on6zRaa7YVzbzAxcHIRC+oshXYiBDH4qRRDh2IE4iUclP4p9uAPjrJGkmfKPO4ZCj/JeDSxBmPv7oCz3bWvBXn44/APbC9wIDAQAB";    //生成的私钥    private String priKeyStr = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAL1l0H0m/Kg7wSIM+iag7bcGpvi5TGo1FjAh75ivqI2AADOeFU/Nxlt6IAXoIW69fh9mElpo+iK4rqifrNFprthXNvMDFwchEL6iyFdiIEMfipFEOHYgTiJRyU/in24A+OskaSZ8o87hkKP8l4NLEGY+/ugLPdta8Fefjj8A9sL3AgMBAAECgYEAoqPJ048lK/qUMP9f2MgdGiyWOcQ1gIax1QdvTniZj1k50xmPR4Z3LZrD4Q6jlwsWQTRP0l+PXT2mjpr/tpzATQDDf5TH0ZOGzeadD57Pp0+lmEN/4OiTyhAz09ZsrDq39QVvzfAPLHuBAzduHU1eefiiyHYIz3yZ/I9I7+aAS1ECQQDjvEdGaQI80wWJEjwGFPDE/Tjfx1jo4ODd2ZumSbKM7PK7N3KG2vPsi4kkj1T6GXx9dNXIsqiAuIthALHGC+GDAkEA1OdzTYI4n8B+81w2JMwXmEtHOqfOvzBAsqNdeEb7Xgw1RKUcLL9vzSf5GThQQMWIqQ3UByqZ/I4X4HUxF1zifQJBAJWNqUjl4OBMvA/d96kOy2ax3E2ovgyA0WsfYoX7U9QULvsfWIiS9SjcIX3u2qE7Z3OD7HjWSq3tgyp6qEQkvT0CQHEIOFUML9fQsRWu/SfoGxbF0Jk5gjBLA+5TgUpcFRRHUviQ2DaBpG+9KyjSlvjsZrOqHcl4Oqy1G8QVM+z9aVkCQQDFxF26mh/H3I0ZMBZHLHL0/mBlkKEPcf0POwOFrw92579LkyLt0zX+gDmH6ANUewhEEutQf13KAIe4+8Yyu2QS";    //待加密数据    private String data = "你好,我是007!";    //已加密数据    private String encryptedData = "n2xoyZgsaT%2BI0Lw58SplaLltuuv%2B55gkmJrTSU2eduSm929V%2Bp1wRbIOstdCAv0OMBzCAZUFBLpBfjxCEG%2BNqw8eiLlNe046Uv4B1CGOh2j%2FJ9wzgxvSaAlA%2FoFtmZ%2Bq0%2BytdwnSU4ThNpoeBtrPVBEFCaZes90%2BnjvM%2FM7cL1s%3D";    /**     * 公钥加密     */    @Test    public void encrypt() throws Exception {        KeySpec keySpec = new X509EncodedKeySpec(Base64.decodeBase64(pubKeyStr));        KeyFactory factory = KeyFactory.getInstance("RSA");        PublicKey key = factory.generatePublic(keySpec);        Cipher cipher = Cipher.getInstance("RSA");        cipher.init(Cipher.ENCRYPT_MODE, key);        byte[] bytes = cipher.doFinal(data.getBytes("utf-8"));//加密,使用UTF-8编码        String base64Encode = Base64.encodeBase64String(bytes);//将字节流数据编码成字符串,以方便传输        String urlEncode = URLEncoder.encode(base64Encode, "utf-8");//由于BASE64编码可能会产生“+”、“/”、“=”等符号,不利于HTTP传输,所以对BASE64编码再进行一次URL编码        System.out.println("encryptedData=" + urlEncode);    }    /**     * 私钥解密     */    @Test    public void decrypt() throws Exception {        KeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(priKeyStr));        KeyFactory factory = KeyFactory.getInstance("RSA");        PrivateKey key = factory.generatePrivate(keySpec);        Cipher cipher = Cipher.getInstance("RSA");        cipher.init(Cipher.DECRYPT_MODE, key);        String urlDecode = URLDecoder.decode(encryptedData, "utf-8");        byte[] base64Decode = Base64.decodeBase64(urlDecode);        byte[] bytes = cipher.doFinal(base64Decode);        String decryptedData = new String(bytes, "utf-8");//使用UTF-8编码        if (decryptedData.equals(data)) {            System.out.println("解密成功!");        } else {            System.out.println("解密失败!");        }    }}
原创粉丝点击