`

java Base64encoder 加密解密

    博客分类:
  • Java
 
阅读更多

代码:

 

package Encryption;

 

import sun.misc.BASE64Encoder;

import sun.misc.BASE64Decoder;

 

public class Encryption {

// 将 s 进行 BASE64 编码

public static String getBASE64(String s) {

if (s == null)

return null;

return (new sun.misc.BASE64Encoder()).encode(s.getBytes());

}

 

// 将 BASE64 编码的字符串 s 进行解码

public static String getFromBASE64(String s) {

if (s == null)

return null;

BASE64Decoder decoder = new BASE64Decoder();

try {

byte[] b = decoder.decodeBuffer(s);

return new String(b);

} catch (Exception e) {

return null;

}

}

}

 

 

改进(转):

 

问题背景:
最近在开发中用到了sun.misc.BASE64Encoder。发现两个问题:
其一、当编码的字节较长时,encode出来的字符串会自动加入\n\r进行自动换行。针对这个问题,原因是rfc规范规定76个字符换一次行。
其二、编码效率较低。

解决办法:
1、重写BASE64Encoder:
Java代码 
public class BASE64Encoder {
	 
    private static char[] codec_table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G',
            'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
            'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
            'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
            'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6',
            '7', '8', '9', '+', '/' };

    public BASE64Encoder() {

    }

    public static String encode(byte[] a) {
        int totalBits = a.length * 8;
        int nn = totalBits % 6;
        int curPos = 0;// process bits
        StringBuffer toReturn = new StringBuffer();
        while (curPos < totalBits) {
            int bytePos = curPos / 8;
            switch (curPos % 8) {
            case 0:
                toReturn.append(codec_table[(a[bytePos] & 0xfc) >> 2]);
                break;
            case 2:

                toReturn.append(codec_table[(a[bytePos] & 0x3f)]);
                break;
            case 4:
                if (bytePos == a.length - 1) {
                    toReturn
                            .append(codec_table[((a[bytePos] & 0x0f) << 2) & 0x3f]);
                } else {
                    int pos = (((a[bytePos] & 0x0f) << 2) | ((a[bytePos + 1] & 0xc0) >> 6)) & 0x3f;
                    toReturn.append(codec_table[pos]);
                }
                break;
            case 6:
                if (bytePos == a.length - 1) {
                    toReturn
                            .append(codec_table[((a[bytePos] & 0x03) << 4) & 0x3f]);
                } else {
                    int pos = (((a[bytePos] & 0x03) << 4) | ((a[bytePos + 1] & 0xf0) >> 4)) & 0x3f;
                    toReturn.append(codec_table[pos]);
                }
                break;
            default:
                //never hanppen
                break;
            }
            curPos+=6;
        }
        if(nn==2)
        {
            toReturn.append("==");
        }
        else if(nn==4)
        {
            toReturn.append("=");
        }
        return toReturn.toString();

    }
}

2、测试重写后的BASE64Encoder效率:

     public static void main(String[] args) throws Exception {
            
        	 
            BASE64Encoder encoder=new BASE64Encoder();
            sun.misc.BASE64Encoder sunEncoder=new sun.misc.BASE64Encoder();
            byte[] testBytes=new byte[1024*1024*2];
            long start=System.currentTimeMillis();
            for(int i=0;i<10;i++)
            {
                sunEncoder.encode(testBytes);
            }
            
            System.out.println("[sun encoder]use time :"+(System.currentTimeMillis()-start));
            start=System.currentTimeMillis();
            for(int i=0;i<10;i++)
            {
                encoder.encode(testBytes);
            }
            
            System.out.println("[our encoder]use time :"+(System.currentTimeMillis()-start));
    
        }
    

    测试后发现,重写后,编码自动回行问题解决,编码效率也会提高一倍。 
    分享到:
    评论

    相关推荐

      java 图片base64 加密解密

      在Java编程中,图片Base64加密解密是一种常见的数据处理技术,特别是在网络传输和存储时,由于Base64编码可以将二进制数据转换为可打印的ASCII字符,因此非常适用。`sun.misc.BASE64Encoder`和`sun.misc.BASE64...

      BASE64Encoder加密与解密

      然而,需要注意的是,这两个类自JDK 9起已被弃用,建议使用`java.util.Base64`包中的`Base64.getEncoder()`和`Base64.getDecoder()`方法来进行BASE64的编码和解码工作。 #### 示例代码分析 给出的代码示例展示了...

      BASE64加密解密

      【标签】:"java base64 Decoder Encoder 加密解密" 在Java中,BASE64的加密和解密操作主要依赖于`java.util.Base64`类,该类从Java 8开始引入,提供了完整的BASE64编码和解码功能。其中,`Encoder`接口用于进行...

      用Java实现BASE64加密解密

      总之,Java提供了方便的`java.util.Base64`工具类来处理Base64编码和解码,使得在Java项目中实现Base64加密解密变得简单且高效。这个基础的加密解密机制虽然简单,但在很多场景下已经足够满足基本的数据保护需求。

      BASE64Encoder.zip

      这个"BASE64Encoder.jar"可能提供了更简便的命令行接口或者图形用户界面,使得用户无需编写代码就能进行字符串的BASE64加密和解密操作。在实际应用中,这样的工具可以帮助开发者快速处理数据的编码转换,尤其是在...

      sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用已解决

      冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中删除,也就是1.8版本后的jdk已经不再支持sun.misc.BASE64Decoder和sun.misc.BASE64Encoder。 这些JAR中可用的类和资源现在以文件中的内部格式存储...

      base64加密解密的hive udf函数

      本文将详细探讨如何在Hive中自定义User Defined Function(UDF)来实现Base64的加密和解密。 首先,我们需要了解Base64的基本原理。Base64是一种将任意二进制数据转化为ASCII字符集的方法,它通过将每3个字节转换为...

      java base64 和RSA 加密解密

      总的来说,Java的Base64和RSA加密解密技术在保护数据安全、传输敏感信息时发挥着重要作用。理解并熟练掌握这两者,对于开发涉及数据安全的Java应用程序至关重要。在实际操作中,应根据具体需求选择合适的加密解密...

      java实现base64加密

      下面我们将详细探讨如何在Java中实现Base64加密和解密: 1. **Base64编码**: 使用`java.util.Base64.Encoder`接口的`encodeToString()`方法可以将字节数组编码为Base64字符串。例如: ```java byte[] bytes = ...

      Base64批量加密工具

      在这个"Base64批量加密工具"中,我们看到作者使用Java语言编写了一个程序,用于自动化处理一批文件或数据的Base64编码过程,避免了手动逐条加密的繁琐。 在Java中,实现Base64编码主要依赖于`java.util.Base64`这个...

      java实现SHA1、SHA、MD5、AES加密、AES解密、BASE64解密、BASE64加密,以及BASE64 jar和源码

      在压缩包中的"java加密、解密"文件中,很可能包含了实现这些加密解密操作的Java代码示例,包括类、方法和可能的测试用例。通过阅读和学习这些代码,开发者可以更好地理解和应用上述加密算法,同时了解如何在实际项目...

      base64转码解密成明文加密成Java密文

      本主题将深入探讨“Base64转码解密成明文”以及“Base64加密成Java密文”的过程,并介绍相关的Java实现。 首先,我们来看Base64解码。Base64编码的基本原理是将每3个字节的数据(24位)分成4组,每组6位,然后将这6...

      将文件进行zip压缩并base64加密和解密

      以下是如何使用BASE64对文件进行加密和解密的示例: ```java import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; public class Base64Util { public static String ...

      java版的base64加密解密

      Java平台提供了多种方式来实现Base64的加密和解密操作。这里我们将详细探讨Java中如何进行Base64的编码与解码。 1. **Base64编码原理** Base64编码基于64个可打印字符,这些字符包括大小写字母、数字以及"+"和"/...

      Base64Encoder.java

      安卓base64加密和解密工具类。

      Base64.java加密解密类文件

      在Java中,`java.util.Base64`类提供了三种不同的编码器和解码器:`Encoder`、`Decoder`以及`Get`和`Set`方法。`Encoder`用于将字节数据编码为Base64字符串,而`Decoder`则负责将Base64字符串解码回原始字节数据。...

      加密解密Base64的js封装代码

      本文将深入探讨Base64编码原理,JavaScript中的实现方式,以及如何封装一个Base64的加密解密工具。 Base64编码的基本原理是将每3个字节(24位)的数据拆分为4组,每组6位,然后将这6位二进制数据转换为其对应的...

      java使用base64加密

      在Java中,我们可以使用内置的`java.util.Base64`类来进行Base64的加密和解密操作。 Base64加密(编码)的过程是这样的:首先,输入的数据被分为每三个字节一组,因为每个字节有8位,三个字节共有24位。Base64将这...

      BASE64加密源码完整JAR包

      在Java中,我们可以使用内置的`java.util.Base64`类来实现BASE64的加密和解密操作。这个"BASE64加密源码完整JAR包"很可能包含了一个或者多个Java类,提供了方便的BASE64编码接口,便于开发者集成到他们的项目中。 ...

      java Base64 字符串加密与解密

      在Java中,Base64的加密和解密操作可以通过Java 8引入的`java.util.Base64`类来实现。以下是简单的使用示例: ```java import java.util.Base64; public class Base64Example { public static void main(String[]...

    Global site tag (gtag.js) - Google Analytics