`
- 浏览:
29963 次
- 性别:
- 来自:
广州
-
原理:
Base64 使用US-ASCII子集的64个字符,即大小写的26个英文字母,0-9,+,/。
编码总是基于3个字符,每个字符用8位二进制表示,因此一共24位,再分为4四组,每组6位,表示一个Base64的值。如下:
"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", "+", "/"
Base64值为0就是A,为27的就是b。这样,每3个字符产生4位的Base64字符。如果被加密的字符串每3个一组,还剩1或2个字符,使用特殊字符"="补齐Base64的4字。
如,编码只有2个字符“me”,m的ascii是109,e的是101,用二进制表示分别是01101101、01100101,连接起来就是0110110101100101,再按6位分为一组:011011、010110、010100(不足6位补0),分别ascii分别是27、22、20,即Base64值为bWU,Base64不足4字,用=补齐,因此bWU=就me的Base64值。
用java的按位逻辑和移位运算就可以实现该算法。但实际上,并不用我们自己去编程实现。现有实现该加密解密算法的程序很多,如javamail的MimeUtility。
实践:javamail的MimeUtility实现对字符串的加密解密
第一步,在eclipse新建一个java项目,并引进javamail.jar
第二步,在com.mascot.encrypt包下创建测试单元,注意引进javax.mail.internet.MimeUtility
package com.mascot.encrypt;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import javax.mail.internet.MimeUtility;
public class Base64 {
public static BufferedReader decode(String b64string) throws Exception {
return new BufferedReader(
new InputStreamReader(
MimeUtility.decode(
new ByteArrayInputStream(
b64string.getBytes()), "base64")));
}
public static void main(String args[]) throws Exception{
System.out.println(encodeAsString("hello"));
System.out.println(decodeAsString("aGVsbG8="));
System.out.println(decodeAsString("aGVsbG8A"));
}
public static String decodeAsString(String b64string) throws Exception {
if (b64string == null) {
return b64string;
}
String returnString = decode(b64string).readLine();
if (returnString == null) {
return returnString;
}
return returnString.trim();
}
public static ByteArrayOutputStream encode(String plaintext)
throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] in = plaintext.getBytes();
ByteArrayOutputStream inStream = new ByteArrayOutputStream();
inStream.write(in, 0, in.length);
//补0
if ((in.length % 3 ) == 1){
inStream.write(0);
inStream.write(0);
} else if((in.length % 3 ) == 2){
inStream.write(0);
}
inStream.writeTo( MimeUtility.encode(out, "base64") );
return out;
}
public static String encodeAsString(String plaintext) throws Exception {
return encode(plaintext).toString();
}
}
第三步,运行程序,结果:
aGVsbG8A
hello
hello
注意到hello的加密结果并不是aGVsbG8=,而是aGVsbG8A,这是因为程序补齐都是补0,而0对应的Base64值就是A,这是我们程序实现与上述理论不同造成的。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
C语言实现Base64加密算法,通常涉及以下几个关键步骤: 1. **初始化编码表**:Base64编码表由64个不同的字符组成,包括大小写字母、数字和两个特殊符号`+`和`/`,以及一个用于填充的`=`。在C语言中,我们可以定义一...
Base64编码的核心原理是将二进制数据进行分组,每24Bit(3字节)为一个大组,再把一个大组的数据分成4个6Bit的小分组。由于6Bit数据只能表示64个不同的字符(2^6=64),所以这也是Base64的名字由来。
Java实现的Base64加密算法示例 Base64加密算法是指一种常用的数据加密算法,主要用于将二进制数据转换为文本格式,以便于在网络上传输。Java语言提供了多种实现Base64加密算法的方式,本文将详细介绍Java实现的Base...
下面我们将详细探讨Delphi中的Base64加密算法以及如何在Delphi程序中实现它。 首先,Base64的基本原理是将每3个8位字节的数据(24位)转换为4个6位的数字,然后将这4个数字用64个可能的字符(包括大小写字母、数字...
**C# BASE64加密算法** 在编程领域,特别是在网络安全和数据传输中,加密是一种基本的安全措施。BASE64是一种编码方式,它将任意二进制数据转化为ASCII字符集中的可打印字符,常用于在网络上传输包含二进制的数据,...
根据提供的文件信息,我们可以深入探讨Base64加密算法在Java中的实现原理以及具体的代码细节。 ### Base64加密算法概述 Base64是一种基于64个可打印字符来表示二进制数据的方法。它通常用于将二进制数据转换为文本...
Base64加密算法 Base64加密算法是一种常用的编码方式,广泛应用于互联网、网络通信、数据存储等领域。它的主要作用是将二进制数据转换为可读的ASCII字符串,以便于在不同的系统和平台之间进行数据交换和存储。 ...
Base64 加密算法 Base64 加密算法是一种常用的数据编码格式,它用于将二进制数据转换为 ASCII 码,以便在网络上传输。Base64 编码算法广泛应用于互联网、电子邮件、网页、云计算等领域。 Base64 编码原理 Base64 ...
对于一些加密传输的字符串要用到base64加密算法,提供这个文件仅供参考
java代码。支持加密与解密,Base64加密算法
Base64加密算法java版
算法类base64 的操作 字符串的加密技术,算法类base64 的操作 字符串的加密技术 as 版本
本资源是集合了SMS4和自定义的Base64加密算法。SMS4加密算法中提供了如下接口: private static byte[] encode16(byte[] plain, byte[] key); private static byte[] decode16(byte[] cipher, byte[] key); private ...
c++实现base64算法加密解密,不需要修改,直接运行即可
它通过特定的算法,将每3个字节(24位)的数据转换为4个6位的十六进制数,每个十六进制数对应Base64字符集中的一个字符。Base64字符集由64个字符组成,包括大小写字母、数字以及"+"和"/",最后还有一个等于号("=")...
AES加密算法采用的是分组密码,将明文分为128位的数据块进行处理,支持128、192、256位的密钥长度。其加密过程主要包括四个基本操作:字节替代(SubBytes)、行位移(ShiftRows)、列混淆(MixColumns)和密钥加...
BASE64是一个很通用的算法,一般的语言开发环境都有其标准的函数调用,但是其源代码是什么呢?此资源提供了源代码。里面有关于算法和内存操作的知识,看看源代码,自己改造一下,对自己也是一个挑战。多练手,提升...