Apache Commons Codec 编码解码
java byte[]转16进制效率高内存底的方法 -回复
![java byte[]转16进制效率高内存底的方法 -回复](https://img.taocdn.com/s3/m/c3dcc97782c4bb4cf7ec4afe04a1b0717fd5b3e7.png)
java byte[]转16进制效率高内存底的方法-回复Java中,将byte数组转换为16进制的字符串是一种常见的操作。
在处理大量的数据时,如何高效地进行转换,并且使用尽可能少的内存是非常重要的。
在本文中,我将为您解释一种高效而低内存消耗的方法。
首先,让我们明确一下问题的要求。
我们需要将一个byte数组转换为16进制的字符串。
例如,如果我们有一个byte数组[10, 20, 30],我们希望得到一个字符串"0A141E"。
这个字符串表示了每个byte值的16进制表示。
要实现这个功能,我们可以使用Java内置的工具类来转换byte数组为16进制字符串。
这种方法是非常简单和直观的,但是它可能存在性能和内存消耗上的问题。
下面是一个使用这种方法的示例代码:javapublic String byteArrayToHexString(byte[] array) {StringBuilder sb = new StringBuilder();for (byte b : array) {sb.append(String.format("02X", b));}return sb.toString();}在上面的代码中,我们使用StringBuilder来逐个追加byte值的16进制表示。
然后,我们使用String.format方法将byte值转换为长度为2的16进制字符串,并将其追加到StringBuilder中。
最后,我们将StringBuilder转换为String并返回结果。
尽管这种方法非常简单,但是它可能存在性能问题。
在每次迭代中,我们都会创建一个新的String对象来保存中间结果,这可能导致频繁的垃圾回收和内存碎片化。
此外,由于StringBuilder的默认初始容量为16,当处理大量数据时,可能会导致多次扩容,进一步增加内存的使用。
为了解决这个问题,我们可以使用Java中的ByteBuffer和Hex类来提高性能和减少内存消耗。
升级JDK8的坑——base64

升级JDK8的坑——base64概述Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,“+”和“/”这64个字符来编码原始字符(还有垫字符“=”)。
一个字符本身是一个字节,也就是8位,而base64编码后的一个字符只能表示6位的信息。
也就是原始字符串中的3字节的信息编码会变成4字节的信息。
Base64的主要作用是满足MIME的传输需求。
在Java8中Base64编码已经成为Java类库的标准,且内置了Base64编码的编码器和解码器。
问题偶然发现使用jdk8内置的Base64解码器进行解析的时候,会抛出ng.IllegalArgumentException: Illegal base64 character a 异常。
这非常奇怪,因为原文是使用jdk7里面的编码器进行编码的,理论上不至于发生这种不兼容的状况。
测试程序还是来写程序测试一下问题到底在哪里。
测试程序使用了一个比较长的原文,主要是这个问题在原文较长的时候才会出现,如果原文较短(字节长度不超过57),那么不会有这个问题。
1 使用jdk7进行编码:import sun.misc.BASE64Encoder;public class TestBase64JDK7 {private static final String TEST_STRING = "0123456789,0123456789,0123456789,0123456789,0123456789,0123456789,0123456789";public static void main(String[] args) {BASE64Encoder base64Encoder = new BASE64Encoder();String base64Result = base64Encoder.encode(TEST_STRING.getBytes());System.out.println(base64Result);}}2 jdk7编码结果:MDEyMzQ1Njc4Oe+8jDAxMjM0NTY3ODnvvIwwMTIzNDU2 Nzg577yMMDEyMzQ1Njc4Oe+8jDAxMjM0NTY3ODnvvIwwMTIzNDU2Nzg577yMMDEyMzQ1Njc4OQ= =3 使用jdk8对上面的编码结果进行解码:import java.util.Base64;public class TestBase64JDK8 {public static void main(String[] args) {String base64Result = "MDEyMzQ1Njc4Oe+8jDAxMjM0NTY3ODnvvIwwMTIzNDU2Nz g577yMMDEyMzQ1Njc4Oe+8jDAxMjM0\n" +"NTY3ODnvvIwwMTIzNDU2Nzg577yMMDEyMzQ1Njc4OQ ==";Base64.getDecoder().decode(base64Result);}}4 结果就如最开始描述的那样,会抛出异常:Exception in thread "main" ng.IllegalArgumentException: Illegal base64 character a at java.util.Base64$Decoder.decode0(Base64.java:714)at java.util.Base64$Decoder.decode(Base64.java:526)at java.util.Base64$Decoder.decode(Base64.java:549)at com.francis.TestBase64JDK8.main(TestBase64JDK8.java:14)难道说jdk7和jdk8在base64的处理上有什么不一样5 继续来看一下jdk8对原文的编码:import java.util.Base64;public class TestBase64JDK8 {private static final String TEST_STRING = "0123456789,0123456789,0123456789,0123456789,0123456789,0123456789,0123456789";public static void main(String[] args) {String base64Result = Base64.getEncoder().encodeToString(TEST_STRING.getBytes());System.out.println(base64Result);}}6 jdk8编码结果:MDEyMzQ1Njc4Oe+8jDAxMjM0NTY3ODnvvIwwMTIzNDU2 Nzg577yMMDEyMzQ1Njc4Oe+8jDAxMjM0NTY3ODnvvIwwMTI zNDU2Nzg577yMMDEyMzQ1Njc4OQ==至此针对比较长的原文进行base64编码可以得到如下结论:•jdk7的编码结果包含换行;•jdk8的编码结果不包含换行;•jdk8无法解码包含换行的编码结果;jdk8的编码结果使用jdk7进行解码,没有任何问题,不再演示。
Base64的编码(Encode)与解码(Decode),及记录JDK10下部分使用new。。。

Base64的编码(Encode)与解码(Decode),及记录JDK10下部分使⽤new。
本⽂记录Base64的编码(Encode)与解码(Decode),及记录JDK10下部分使⽤ new BASE64Decoder().encode(byte[] bytes)⽅法报错。
⽬前有三种⽅式进⾏base64的编解码。
1.说明: 在Java⽤Base64⼀点都不难,不⽤⼏⾏程式码就解决了!只是这个sun.misc套件所提供的Base64功能,编码和解码的效率并不太好--->2.(1)在java早期使⽤JDK⾥sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,主要代码如下3.final BASE64Encoder encoder = new BASE64Encoder();4.final BASE64Decoder decoder = new BASE64Decoder();5.final String text = "字串⽂字";6.final byte[] textByte = text.getBytes("UTF-8");7.//编码8.final String encodedText = encoder.encode(textByte);9.System.out.println(encodedText);10.//解码11.System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));1.(2)appache--Apache Commons Codec有提供Base64的编码与解码功能,会使⽤到mons.codec.binary套件下的Base64类别,使⽤⽅法如下:2.final Base64 base64 = new Base64();3.final String text = "字串⽂字";4.final byte[] textByte = text.getBytes("UTF-8");5.//编码6.final String encodedText = base64.encodeToString(textByte);7.System.out.println(encodedText);8.//解码9.System.out.println(new String(base64.decode(encodedText), "UTF-8"));10.使⽤⽅法⽆区别,就是包和sun.misc套件包名有区别,效能实际执⾏起来也快了不少。
Java的commons包的简介

Java的commons包的简介 Jakarta Commons是Jakarta的⼀个⼦项⽬,⽬的是创建和维护独⽴于其他框架和产品的程序包(packages)。
Jakarta Commons项⽬源于重⽤,其中的程序包必须确保能够重⽤。
有⼀些包来⾃于其他项⽬,例如通⽤⽇志包是Jakarta Struts的⼀部分。
当开发者发现某个包对于其他项⽬很有⽤,可以缩短开发周期,他们决定将这些包做成通⽤组件。
这就是Jakarta Commons项⽬。
Apache Commons包含了很多开源的⼯具,⽤于解决平时编程经常会遇到的问题,减少重复劳动。
我选了⼀些⽐较常⽤的项⽬做简单介绍。
⽂中⽤了很多⽹上现成的东西,我只是做了⼀个汇总整理。
⼀、Commons BeanUtils 1、资源链接 2、说明 针对Bean的⼀个⼯具集。
由于Bean往往是有⼀堆get和set组成,所以BeanUtils也是在此基础上进⾏⼀些包装。
3、使⽤⽰例 功能有很多,⽹站上有详细介绍。
⼀个⽐较常⽤的功能是Bean Copy,也就是copy bean的属性。
如果做分层架构开发的话就会⽤到,⽐如从PO(Persistent Object)拷贝数据到VO(Value Object)。
传统⽅法如下://得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;//构造Teacher对象Teacher teacher=new Teacher();//赋值teacher.setName(teacherForm.getName());teacher.setAge(teacherForm.getAge());teacher.setGender(teacherForm.getGender());teacher.setMajor(teacherForm.getMajor());teacher.setDepartment(teacherForm.getDepartment());//持久化Teacher对象到数据库HibernateDAO= ;HibernateDAO.save(teacher);View Code 使⽤BeanUtils后,代码就⼤⼤改观了,如下所⽰://得到TeacherFormTeacherForm teacherForm=(TeacherForm)form;//构造Teacher对象Teacher teacher=new Teacher();//赋值BeanUtils.copyProperties(teacher,teacherForm);//持久化Teacher对象到数据库HibernateDAO= ;HibernateDAO.save(teacher);View Code⼆、Commons CLI 1、资源链接 2、说明 这是⼀个处理命令的⼯具。
maven commons-codec 使用

maven commons-codec 使用Commons-codec是Apache Commons子项目中的一个用于对字符串或二进制数据进行加密和解密处理的Java代码库。
其提供了编码(输出)/解码(输入)、摘要、摘要认证等功能,满足各种用户需求。
一、关于Commons-codec1、什么是Commons-codec?Commons-codec是由Apache提供的一个子项目,它是基于对字符串或二进制数据进行加密和解密处理的Java代码库;2、Commons-codec功能?Commons-codec提供了编码(输出)/解码(输入)、摘要、摘要认证等常见功能;3、Commons-codec的使用范围?Commons-codec的使用范围非常广泛,可以用于多种编码,解码和数据加密解密任务。
二、Commons-codec 实际应用1、对登录注册及验证码的加密Commons-codec可以用于对用户的登录信息,以及用户输入的验证码等信息进行加密存储,以此来提高网站的安全性,避免用户信息被窃取或未经授权访问;2、实现数据签名Commons-codec可以通过摘要算法(如MD5/SHA1/SHA256等)对消息体进行签名,从而实现消息的完整性和可靠性;3、进行文件的压缩处理Commons-codec可以对文本或二进制文件进行压缩处理,以减少文件体积,提高传输效率。
三、Commons-codec使用注意事项1、首先要将Commons-codec添加进项目中,以便在项目使用Commons-codec;2、在使用Commons-codec时要注意密码安全,确保用户和密码被加密或者摘要认证后均不能被显示;3、尽量避免将文件存储在服务器端,而应该将文件以字符流的形式读取出来并写入客户端;4、不要使用未经授权的Commons-codec,除非是官方推荐的版本;5、一定要确保客户端及服务器端都使用同一种Commons-codec,以便对收发的数据进行正确的加解密处理。
org.apache.http.client.HttpClient使用方法

org.apache.http.client.HttpClient使⽤⽅法⼀.官⽹说明:Commons HttpClient项⽬现已结束,不再开发。
它已被其HttpClient和HttpCore模块中的Apache HttpComponents项⽬所取代,它们提供更好的性能和更⼤的灵活性。
从2011年开始,mons.httpclient就不再开发。
这就是说,它已经落伍了。
⽅法的对称性上的区别⼀、org.apache.http.clientorg.apache.http.client在发起请求前,假如对某个参数a 进⾏url encode编码。
服务端必须进⾏url decode。
//客户端编码Stirng a=URLEncoder.encode(cont,"GBK");//服务端解码URLDecoder.decode(a,"gbk");且服务器端获取到的参数a为可识别的没有任何变动的url encode后原值。
⼆、mons.httpclientmons.httpclient则与之相反。
服务端获取到的a为不可识别的乱码,且不能⽤url decode解码。
//服务端解码new String(cont.getBytes("ISO8859_1"), "GBK")与时俱进org.apache.http.client更好的性能和更⼤的灵活性。
三.pom.xml<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency><!-- https:///artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.1</version></dependency>最最简单的⽅法利⽤Jsoup直接获取HTML页⾯Document doc = Jsoup.connect("/xiaoshuodaquan/").get(); Elements elements = doc.getElementsContainingOwnText("⽃破苍穹");四.简单使⽤⽅法package com.feilong.reptile.util;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.HttpClientBuilder;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import java.util.ArrayList;import java.util.List;import mons.codec.Charsets;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import ValuePair;public class MHttpClient {public void get(String url) throws Exception {// 创建HttpClient实例HttpClient client = HttpClientBuilder.create().build();// 根据URL创建HttpGet实例HttpGet get = new HttpGet(url);// 执⾏get请求,得到返回体HttpResponse response = client.execute(get);// 判断是否正常返回if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 解析数据String data = EntityUtils.toString(response.getEntity(),Charsets.UTF_8); System.out.println(data);}}public void post(String url) throws Exception {// 创建HttpClient实例HttpClient client = HttpClientBuilder.create().build();// 根据URL创建HttpPost实例HttpPost post = new HttpPost(url);// 构造post参数List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("name", "11"));// 编码格式转换UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params);// 传⼊请求体post.setEntity(entity);// 发送请求,得到响应体HttpResponse response = client.execute(post);// 判断是否正常返回if (response.getStatusLine().getStatusCode() == 200) {// 解析数据HttpEntity resEntity = response.getEntity();String data = EntityUtils.toString(resEntity);System.out.println(data);}}public static void main(String[] args) throws Exception {MHttpClient cl = new MHttpClient();String url = "/xiaoshuodaquan/";cl.get(url);}}六. 复杂使⽤⽅法package com.feilong.reptile.util;import java.io.IOException;import java.io.InterruptedIOException;import .UnknownHostException;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import .ssl.SSLException;import mons.codec.Charsets;import org.apache.http.Header;import org.apache.http.HttpEntityEnclosingRequest;import org.apache.http.HttpRequest;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.HttpRequestRetryHandler;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.protocol.HttpClientContext;import org.apache.http.client.utils.URIBuilder;import org.apache.http.config.SocketConfig;import org.apache.http.conn.ConnectTimeoutException;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;/*** 使⽤HttpClient发送和接收Http请求** @author manzhizhen**/public class HttpUtils {private static HttpClient httpClient;// 最⼤连接数private static final int MAX_CONNECTION = 100;// 每个route能使⽤的最⼤连接数,⼀般和MAX_CONNECTION取值⼀样private static final int MAX_CONCURRENT_CONNECTIONS = 100;// 建⽴连接的超时时间,单位毫秒private static final int CONNECTION_TIME_OUT = 1000;// 请求超时时间,单位毫秒private static final int REQUEST_TIME_OUT = 1000;// 最⼤失败重试次数private static final int MAX_FAIL_RETRY_COUNT = 3;// 请求配置,可以复⽤private static RequestConfig requestConfig;static {SocketConfig socketConfig = SocketConfig.custom().setSoTimeout(REQUEST_TIME_OUT).setSoKeepAlive(true).setTcpNoDelay(true).build();requestConfig = RequestConfig.custom().setSocketTimeout(REQUEST_TIME_OUT).setConnectTimeout(CONNECTION_TIME_OUT).build();/*** 每个默认的 ClientConnectionPoolManager 实现将给每个route创建不超过2个并发连接,最多20个连接总数。
ApacheCommons各个jar包的功能说明
ApacheCommons各个jar包的功能说明BeanUtilsCommons-BeanUtils 提供对 Java 反射和⾃省API的包装BetwixtBetwixt提供将 JavaBean 映射⾄ XML ⽂档,以及相反映射的服务.ChainChain 提供实现组织复杂的处理流程的“责任链模式”.CLICLI 提供针对命令⾏参数,选项,选项组,强制选项等的简单API.CodecCodec 包含⼀些通⽤的编码解码算法。
包括⼀些语⾳编码器, Hex, Base64, 以及URL encoder.CollectionsCommons-Collections 提供⼀个类包来扩展和增加标准的 Java Collection框架ConfigurationCommons-Configuration ⼯具对各种各式的配置和参考⽂件提供读取帮助.Daemon⼀种 unix-daemon-like java 代码的替代机制DBCPCommons-DBCP 提供数据库连接池服务DbUtilsDbUtils 是⼀个 JDBC helper 类库,完成数据库任务的简单的资源清除代码.DigesterCommons-Digester 是⼀个 XML-Java对象的映射⼯具,⽤于解析 XML配置⽂件.DiscoveryCommons-Discovery 提供⼯具来定位资源 (包括类) ,通过使⽤各种模式来映射服务/引⽤名称和资源名称.ELCommons-EL 提供在JSP2.0规范中定义的EL表达式的解释器.FileUploadFileUpload 使得在你可以在应⽤和Servlet中容易的加⼊强⼤和⾼性能的⽂件上传能⼒HttpClientCommons-HttpClient 提供了可以⼯作于HTTP协议客户端的⼀个框架.IOIO 是⼀个 I/O ⼯具集JellyJelly是⼀个基于 XML 的脚本和处理引擎。
Jelly 借鉴了 JSP 定指标签,Velocity, Cocoon和Xdoclet中的脚本引擎的许多优点。
各种格式的编码解码工具类分享(hex解码base64编码)
各种格式的编码解码⼯具类分享(hex解码base64编码)复制代码代码如下:import java.io.UnsupportedEncodingException;import .URLDecoder;import .URLEncoder;import mons.codec.DecoderException;import mons.codec.binary.Base64;import mons.codec.binary.Hex;import ng.StringEscapeUtils;/*** 各种格式的编码加码⼯具类.** 集成Commons-Codec,Commons-Lang及JDK提供的编解码⽅法.***/public class EncodeUtils {private static final String DEFAULT_URL_ENCODING = "UTF-8";/*** Hex编码.*//*public static String hexEncode(byte[] input) {return Hex.encodeHexString(input);}*//*** Hex解码.*/public static byte[] hexDecode(String input) {try {return Hex.decodeHex(input.toCharArray());} catch (DecoderException e) {throw new IllegalStateException("Hex Decoder exception", e);}}/*** Base64编码.*/public static String base64Encode(byte[] input) {return new String(Base64.encodeBase64(input));}/*** Base64编码, URL安全(将Base64中的URL⾮法字符�?,/=转为其他字符, 见RFC3548).*/public static String base64UrlSafeEncode(byte[] input) {return Base64.encodeBase64URLSafeString(input);}/*** Base64解码.*/public static byte[] base64Decode(String input) {return Base64.decodeBase64(input);}/*** URL 编码, Encode默认为UTF-8.*/public static String urlEncode(String input) {try {return URLEncoder.encode(input, DEFAULT_URL_ENCODING);} catch (UnsupportedEncodingException e) {throw new IllegalArgumentException("Unsupported Encoding Exception", e); }}/*** URL 解码, Encode默认为UTF-8.*/public static String urlDecode(String input) {try {return URLDecoder.decode(input, DEFAULT_URL_ENCODING);} catch (UnsupportedEncodingException e) {throw new IllegalArgumentException("Unsupported Encoding Exception", e); }}/*** Html 转码.*/public static String htmlEscape(String html) {return StringEscapeUtils.escapeHtml(html);}/*** Html 解码.*/public static String htmlUnescape(String htmlEscaped) {return StringEscapeUtils.unescapeHtml(htmlEscaped);}/*** Xml 转码.*/public static String xmlEscape(String xml) {return StringEscapeUtils.escapeXml(xml);}/*** Xml 解码.*/public static String xmlUnescape(String xmlEscaped) {return StringEscapeUtils.unescapeXml(xmlEscaped);}}。
base62编码java类
base62编码java类以下是一个Java类,实现了对字符串进行Base62编码和解码的功能,它使用了Commons Codec库:javaimport org.apachemons.codec.binary.Base64;public class Base62 {private static final char[] characters ="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst uvwxyz".toCharArray();public static String encode(byte[] bytes) {StringBuilder builder = new StringBuilder();int length = bytes.length;int index = 0;while (index < length) {int currentByte = bytes[index++] & 0xff;int nextByte = index < length ? bytes[index] & 0xff : 0;int currentChar = currentByte >>> 2;int nextChar = ((currentByte & 0x3) << 4) (nextByte >>>4);int thirdChar = (nextByte & 0xf) << 2;builder.append(characters[currentChar]);if (index < length) {builder.append(characters[nextChar]);} else {builder.append(characters[thirdChar]);builder.append("=");}if (index < length) {builder.append(characters[thirdChar]);} else {builder.append("=");}}return builder.toString();}public static byte[] decode(String string) {int length = string.length();int index = 0;int padding = 0;if (length > 0 && string.charAt(length - 1) == '=') {padding++;if (length > 1 && string.charAt(length - 2) == '=') {padding++;}}byte[] bytes = new byte[(length * 6 >> 3) - padding];int mask = (1 << 6) - 1;while (index < length) {int currentChar = string.charAt(index++);int currentByte = indexOf(currentChar) << 2;currentChar = index < length ? string.charAt(index++) : 0;currentByte = (indexOf(currentChar) & 0x30) >>> 4;bytes[bytes.length - ((length - index + 1) >> 1) - 1] = (byte) currentByte;if (index < length) {currentChar = string.charAt(index++);currentByte = (indexOf(currentChar) & 0x3f) << 4;currentChar = index < length ? string.charAt(index++) : 0;currentByte = (indexOf(currentChar) & 0x3c) >>> 2;bytes[bytes.length - ((length - index + 1) >> 1) - 1] = (byte) currentByte;}if (index < length) {currentChar = string.charAt(index++);currentByte = (indexOf(currentChar) & 0x03) << 6;currentChar = index < length ? string.charAt(index++) : 0;currentByte = indexOf(currentChar);bytes[bytes.length - ((length - index + 1) >> 1) - 1] = (byte) currentByte;}}return bytes;}private static int indexOf(int character) {for (int i = 0; i < characters.length; i++) {if (characters[i] == character) {return i;}}throw new IllegalArgumentException("Invalid Base62 character: " + character);}}使用示例:javaString text = "Hello, world!";byte[] bytes = text.getBytes();String encoded = Base62.encode(bytes);byte[] decoded = Base62.decode(encoded); String original = new String(decoded);System.out.println("Original text: " + text); System.out.println("Encoded text: " + encoded); System.out.println("Decoded text: " + original);输出:Original text: Hello, world!Encoded text: 1R4UheWfTh0IcTDecoded text: Hello, world!。
java使用Hex编码解码实现Aes加密解密功能示例
java使⽤Hex编码解码实现Aes加密解密功能⽰例本⽂实例讲述了java使⽤Hex编码解码实现Aes加密解密功能。
分享给⼤家供⼤家参考,具体如下:这⾥的Aes加密解密⽅法使⽤Hex进⾏了编码解码package com.baidu.wallet.bdwallet.utils;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.SecretKeySpec;import mons.codec.DecoderException;import mons.codec.binary.Hex;public class Test {private static final String AES="AES";private static final String UTF8="UTF-8";/*** AES加密* @param content* @param pkey* @return* @throws DecoderException*/private static byte[] encrypt(String content, String pkey) throws DecoderException {try {String private_key=pkey;byte[] encodeFormat=null;try {//秘钥 Hex解码为什么秘钥要进⾏解码,因为秘钥是某个秘钥明⽂进⾏了Hex编码后的值,所以在使⽤的时候要进⾏解码encodeFormat = Hex.decodeHex(private_key.toCharArray());} catch (DecoderException e) {e.printStackTrace();}SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);// Cipher对象实际完成加密操作Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// 加密内容进⾏编码byte[] byteContent = content.getBytes(UTF8);// ⽤密匙初始化Cipher对象cipher.init(Cipher.ENCRYPT_MODE, key);// 正式执⾏加密操作byte[] result = cipher.doFinal(byteContent);return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}return null;}/*** AES解密* @param contents* @param password* @return* @throws DecoderException*/private static byte[] decrypt(String contents, String password) throws DecoderException {try {//密⽂使⽤Hex解码byte[]content = Hex.decodeHex(contents.toCharArray());//秘钥 Hex解码为什么秘钥要进⾏解码,因为秘钥是某个秘钥明⽂进⾏了Hex编码后的值,所以在使⽤的时候要进⾏解码byte[] encodeFormat = Hex.decodeHex(password.toCharArray());SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);// Cipher对象实际完成加密操作Cipher cipher = Cipher.getInstance(AES);// ⽤密匙初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, key);// 正式执⾏解密操作byte[] result = cipher.doFinal(content);return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();}return null;}/*** Aes加密* @param context 明⽂* @param private_key 秘钥* @return* @throws DecoderException*/public static String encryption(String context,String private_key) throws DecoderException{//加密后的明⽂也就变成了密⽂byte[] encryptResult = encrypt(context, private_key);//密码⽂Hex编码String encryptResultStr = Hex.encodeHexString(encryptResult);return encryptResultStr;}/*** Aes解密* @param context 密⽂* @param private_key 秘钥* @return* @throws DecoderException* @throws UnsupportedEncodingException*/public static String decryption(String context,String private_key) throws DecoderException, UnsupportedEncodingException{ //这⾥的密⽂解密前先进⾏了Hex解码byte[] decryptResult = decrypt(context, private_key);String result = new String(decryptResult, UTF8);return result;}public static void main(String[] args) throws UnsupportedEncodingException, DecoderException {//加密内容String content = "123456787654321";//AES加密解密秘钥String password = "这个值⼀般都是给定的,双发都知道";// 加密System.out.println("加密前:" + content);// 调⽤加密⽅法String encryptResultStr = encryption(content, password);System.out.println("加密后:" + encryptResultStr);// 调⽤解密⽅法String result = decryption(encryptResultStr, password);// 解密内容进⾏解码System.out.println("解密后:" + result);}}这个⽅法在正式的项⽬中已经在使⽤⽊有问题,注意这⾥的AES加密解密你要要对哦……上⾯使⽤的就是mons.codec.binary.Hex这个类的⽅法,在maven中配置如下:<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.4</version></dependency>注意:这⾥要使⽤1.4以及以上版本,应为1.4以下的没有Hex.encodeHexString(byte[])这个⽅法!PS:关于加密解密感兴趣的朋友还可以参考本站在线⼯具:希望本⽂所述对⼤家java程序设计有所帮助。