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("解密失败!"); } }}
阅读全文
0 0
- Java加密和解密
- java 加密和解密
- Java加密和解密
- Java加密和解密
- Java加密和解密
- Java加密和解密
- Java加密和解密
- java加密和解密
- java MD5加密和解密
- java对称加密和解密
- JAVA加密和解密案例
- 用java实现des加密和解密
- JAVA实现DES加密和解密软件
- java 和 C# 通用加密解密
- JAVA和C# 3DES加密解密
- Java的MD5加密和解密
- java实现XML的加密和解密
- java和.net 交互加密解密
- JSDOM对象控制HTML元素详解
- pandas get_dummies()使用
- jdk1.8安装之后,jdk版本不是自己设置的jdk版本
- Maven简单、快速构建spring mvc项目
- 【Java高级开发工程师】近一个月的面试总结
- java加密和解密
- 正则表达式的使用方法与常用模板
- 【Restful】三分钟彻底了解Restful最佳实践
- 剑指offer——构建乘积数组
- ActiveMQ的queue以及topic两种消息处理机制分析
- 典型的C++程序员成长经历
- 初创团队的Android应用质量保障之道
- 更改文本框的值(加法运算)
- 欢迎使用CSDN-markdown编辑器