java中Base64转码与解码(加密与解密)原理与使用

默认分类,技术讨论 280
默认分类,技术讨论 280

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

Base64编码可用于在HTTP环境下传递较长的标识信息。
例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到,算是起到一个加密的作用。

Base64使用A--Z,a--z,0--9,+,/ 这64个字符,编码原理是将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了,这样还不能保证得到的字符都是可见字符,为了达到此目的,Base64制定了一个编码表,进行统一的转换。
码表的大小为2^6=64,这也是Base64名称的由来。 当剩下的字符数量不足3个字节时,则应使用0进行填充,相应的,输出字符则使用'='占位,因此编码后输出的文本末尾可能会出现1至2个'='。解码原理是将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位,这样就还原了。

Base64编码表

Value EncodingValue EncodingValue EncodingValue Encoding
0 A17 R34 i51 z
1 B18 S35 j52 0
2 C19 T36 k53 1
3 D20 U37 l54 2
4 E21 V38 m55 3
5 F22 W39 n56 4
6 G23 X40 o57 5
7 H24 Y41 p58 6
8 I25 Z42 q59 7
9 J26 a43 r60 8
10 K27 b44 s61 9
11 L28 c45 t62 +
12 M29 d46 u63 /
13 N30 e47 v
14 O31 f48 w(pad) =
15 P32 g49 x
16 Q33 h50 y

Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,常用在需用通过文本协议(比如HTTP和SMTP)来传输二进制数据的情况下

Base64并不是一种用于安全领域的加密解密算法(这类算法有DES等),尽管我们有时也听到使用Base64来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别。

Base64编解码算法都很简单,网上有很多源码,这里就不介绍了。

那java中如何使用这种编码呢?其实JDK里边相应的类和方法,但是API里是看不到的,网上都说是编写JDK的内部人员专用的,java中可以直接使用,但不提倡大家用,可以看看这个http://wenda.haosou.com/q/1378566517069409

不过,对此有开源的jar包

javabase64-1.2.jar
下载地址:http://files.blogjava.net/xmatthew/javabase64-1.2.jar.zip

引入这个jar包后,几行代码就可以实现编码与解码了:

示例代码:

String类型:进行Base64编码

String encoded = Base64.encode("Hello, world!");

String类型:进行Base64解码

String decoded = Base64.decode(encoded);

指定字符编码方式

String encoded = Base64.encode("Hello, world!", "UTF-8");    
String decoded = Base64.decode(encoded, "UTF-8");   

对文件进行编码:

如果文件比较小,可以通过以下方式,直接读取到内存中进行编码处理

byte[] source = ...; // load your data here
byte[] encoded = Base64.encode(source);
byte[] decoded = Base64.decode(encoded);

如果大件比较大,则建议使用stream:

代码示例Base64编码:

InputStream inputStream = new FileInputStream("source.jpg");
OutputStream outputStream = new FileOutputStream("encoded.b64");
Base64.encode(inputStream, outputStream);
outputStream.close();
inputStream.close();

代码示例Base64解码:

InputStream inputStream = new FileInputStream("encoded.b64");
OutputStream outputStream = new FileOutputStream("decoded.jpg");
Base64.decode(inputStream, outputStream);
outputStream.close();
inputStream.close();

作者:Java我人生
来源:CSDN
原文:https://blog.csdn.net/chenleixing/article/details/46543901

  • copyright
    著作权归作者所有
copyright info_outline
  1. Cialis Originale Al Prezzo Piu Basso Prix Finasteride viagra Priligy Update

  2. Kamagra 50mg Uk Cialis Orosolubile buy generic cialis Generic Real Clobetasol Free Shipping Cheap Store Propecia Side Effects Reviews Cialis Y Colesterol Canadian Health Viagra Will Amoxicillin Casue A Kidney Infection viagra Reductil Acomplia Propecia Can Amoxicillin Be Taken With Fluconazole cialis 5mg best price Cialis Dose Comment Utiliser Cytotec Pour Avorter 500g Of Amoxicillin Used For Stds Levitra Nebenwirkungen Forum Forum Cialis Tadalafil Cephalexin Dosage Dental viagra online pharmacy Generic Cialis Shipped With In Canada Propecia Eyebrow Hair Brand Cialis Non Prescription Needed Viagra Britain cialis El Cialis Sirve Keflex Antibiotic Side Effects Buy Pentoxifylline 400 Online

选择表情

*

*