Java Base64 加密/解密

Base64常用来表示字串加密过后的内容,使用Java 程式语言来实作Base64的编码与解码功能

1.在Java上做Base64的编码与解码,会使用到JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,代码如下

2.Apache Commons Codec有提供Base64的编码与解码功能,使用到org.apache.commons.codec.binary套件下的Base64类别

  http://commons.apache.org/proper/commons-codec/download_codec.cgi 下载commons-codec-1.11-bin代码

3.java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码

package com.test;

import org.apache.commons.codec.binary.Base64;
import org.junit.Test;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * @author ceshi
 * @Title: JUnitBase64
 * @ProjectName ceshi
 * @Description: TODO
 * @date 2018/6/1320:59
 */
public class JUnitBase64 {

    @Test
    public void test()throws Exception{
        //BASE64Encoder
        BASE64Encoder encoder = new BASE64Encoder();
        BASE64Decoder decoder = new BASE64Decoder();
        String text = "你好!";
        byte[] textByte = text.getBytes("UTF-8");
        //编码
        String encodedText = encoder.encode(textByte);
        System.out.println(encoder.encode(text.getBytes("UTF-8"));
        //解码
        System.out.println(new String(decoder.decodeBuffer(encodedText), "UTF-8"));

        //Apache Commons Codec
        Base64 base64 = new Base64();
        textByte = text.getBytes("UTF-8");
        //编码
        encodedText = base64.encodeToString(textByte);
        System.out.println(encodedText);
        //解码
        System.out.println(new String(base64.decode(encodedText), "UTF-8"));


        //Java 8
        Base64.Decoder decoder = Base64.getDecoder();
        Base64.Encoder encoder = Base64.getEncoder();

        //编码
        encodedText = encoder.encodeToString(textByte);
        System.out.println(encodedText);
        //解码
        System.out.println(new String(decoder.decode(encodedText), "UTF-8"));


    }
}

 

posted on 2018-06-13 21:16 【cosmo】 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Native Interface(JNI)是Java平台的一项技术,它允许Java代码与本地代码(如C、C++)进行交互。在这种情况下,我们可以使用JNI来实现Base64加密解密。 以下是一个示例代码,演示如何使用JNI实现Base64加密解密: 1.创建一个名为"Base64.c"的C文件,其中包含以下代码: #include<jni.h> #include<stdlib.h> #include<stdio.h> #include<errno.h> #include<string.h> #include<android/log.h> #include "android/bitmap.h" #include "android/log.h" #include "libjpeg/jpeglib.h" #include "com_example_bitmaptest_utils_CImageUtils.h" //Base64加密函数 JNIEXPORT jstring JNICALL Java_com_example_bitmaptest_utils_CImageUtils_encrypt(JNIEnv *env, jobject obj, jstring str) { const char *src = (*env)->GetStringUTFChars(env, str, NULL); if(src == NULL){ return NULL; } jsize len = (*env)->GetStringUTFLength(env, str); int mod = len % 3; int new_len = len + (mod == 0 ? 0 : (3 - mod)); unsigned char *input = (unsigned char *)malloc(new_len); memset(input, 0, new_len); memcpy(input, src, len); int i = 0, j = 0; unsigned char *output = (unsigned char *)malloc(new_len * 4 / 3); memset(output, 0, new_len * 4 / 3); while(i < new_len){ int c = input[i++] << 16 | input[i++] << 8 | input[i++]; output[j++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[c >> 18]; output[j++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(c >> 12) & 0x3f]; output[j++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(c >> 6) & 0x3f]; output[j++] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[c & 0x3f]; } if(mod > 0){ output[new_len * 4 / 3 - 1] = '='; } if(mod == 1){ output[new_len * 4 / 3 - 2] = '='; } (*env)->ReleaseStringUTFChars(env, str, src); jstring result = (*env)->NewStringUTF(env, output); free(input); free(output); return result; } //Base64解密函数 JNIEXPORT jstring JNICALL Java_com_example_bitmaptest_utils_CImageUtils_decrypt(JNIEnv *env, jobject obj, jstring str) { const char *src = (*env)->GetStringUTFChars(env, str, NULL); if(src == NULL){ return NULL; } jsize len = (*env)->GetStringUTFLength(env, str); int new_len = len / 4 * 3; if(src[len - 1] == '='){ new_len--; } if(src[len - 2] == '='){ new_len--; } unsigned char *input = (unsigned char *)malloc(len); memset(input, 0, len); memcpy(input, src, len); int i = 0, j = 0; unsigned char *output = (unsigned char *)malloc(new_len); memset(output, 0, new_len); while(i < len){ unsigned char c[4]; int k = 0; while(k < 4 && i < len){ if(input[i] != '\n' && input[i] != '\r'){ c[k++] = input[i++]; }else{ i++; } } if(k == 4){ output[j++] = (c[0] << 2) | (c[1] >> 4); output[j++] = (c[1] << 4) | (c[2] >> 2); output[j++] = (c[2] << 6) | c[3]; } } (*env)->ReleaseStringUTFChars(env, str, src); jstring result = (*env)->NewStringUTF(env, output); free(input); free(output); return result; } 2.使用javac编译CImageUtils.java文件,生成CImageUtils.class文件。 3.使用javah命令生成.h头文件,命令为:javah -classpath . com.example.bitmaptest.utils.CImageUtils 4.将生成的CImageUtils.h文件拷贝到C文件所在目录下,并在C文件中包含该头文件。 5.使用ndk-build命令编译C文件,生成动态库文件。 6.将生成的动态库文件拷贝到Android项目的libs目录下。 7.在Java代码中调用JNI函数,例如: public class MainActivity extends AppCompatActivity { static { System.loadLibrary("base64"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String str = "hello, world"; String encryptStr = CImageUtils.encrypt(str); Log.i("MainActivity", "encryptStr: " + encryptStr); String decryptStr = CImageUtils.decrypt(encryptStr); Log.i("MainActivity", "decryptStr: " + decryptStr); } } 通过以上步骤,我们就可以在Android项目中使用JNI实现Base64加密解密
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值