首先要说明的是Base64是编码解码,而不是加密解密,因为加密解密你是需要密钥的,编码是大家都知道怎么解码的,不需要密钥的。
Base64,将任意的字节数组,通过算法,生成只有(英文大小写(52个字母),数字(10个)+/(2个))内容标识的字符串数据;
相当于将任何的内容转换为可见字符串的表示。
Base64, 将原始数据按照3个字节一个分组,按位进行分割为每6位一个字节的形式,进行转换,形成新的4个字节,这4个字节的再通过Base64的编码表进行映射。
6位能够表示的字符数就是64所以称为Base64,其实就是字节总长度增加了3分之一。
编码: Base64.encodeToString("你好".getBytes(), Base64.NO_WRAP);//NO_WRAP不换行
解码:Base64.decode(fakeString.getBytes(), Base64.NO_WRAP);//解码时注意事项,第二个参数的取值,应该和编码时一致;
实例具体的代码:
package tech.androidstudio.encodecryp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
base64Test();
}
public void base64Test(){
/**
* 最好 使用 encodeToString,不然还要自己转换。
byte[] encode = Base64.encode("你好".getBytes(), Base64.NO_WRAP);
String encodeString = new String(encode);
Log.d("kodulf","你好的Base64 的编码是"+encodeString);
*/
//编码
String encodeToString = Base64.encodeToString("你好".getBytes(), Base64.NO_WRAP);//NO_WRAP 不换行
Log.d("kodulf","你好的Base64 的编码是"+encodeToString);
//解码
//模拟解码的数据
String fakeString = Base64.encodeToString("Kodulf 是一个好人".getBytes(), Base64.NO_WRAP);
Log.d("kodulf","模拟解码数据得到的编码:"+fakeString);
// 解码时注意事项,第二个参数的取值,应该和编码时一致;
byte[] decodeStringbytes = Base64.decode(fakeString.getBytes(), Base64.NO_WRAP);
String decodeString = new String(decodeStringbytes);
Log.d("kodulf","模拟解码数据得到的解码:"+decodeString);
}
}
03-22 02:48:29.254 511-511/? D/kodulf: 你好的Base64 的编码是5L2g5aW9
03-22 02:48:29.254 511-511/? D/kodulf: 模拟解码数据得到的编码:S29kdWxmIOaYr+S4gOS4quWlveS6ug==
03-22 02:48:29.254 511-511/? D/kodulf: 模拟解码数据得到的解码:Kodulf 是一个好人