- ·上一篇文章:java数组常用的方法总结
- ·下一篇文章:消息摘要MD/SHA/HMAC的使用方法
java中Base64编码解码的编程使用
一、密码学
1、密码学算法的分类
消息编码:Base64
消息摘要:MD类、SHA类、MAC
对称密码:DES、3DES、AES (参见:java对称密码算法的使用DES/3DES/AES算法 )
非对称密码:RSA、DH密钥交换
数字签名:RSASignature、DSASignature
2、密码学五元组
(明文,密文,加密算法,解密算法、密钥)
3、对称密码(传统密码)与非对称密码(公钥密码)
对称密码:加解密使用相同密钥的密码体制
非对称密码:加解密使用不同的密钥——公钥与私钥
4、Java编程中常用类
1)消息编码
BASE64Encoder、BASE64Decoder
2)消息摘要(参见:消息摘要MD/SHA/HMAC的使用方法 )
MessageDigest
3)对称密码
KeyGenerator、SecretKey、Cipher
4)非对称密码
KeyPairGenerator、KeyFactory、KeyPair、PublicKey、PrivateKey、Cipher
5)数字签名
Signature
二、Base64算法的编程使用
1、Base64编码示例
密文:d3d3LmJjb2Rlci5jbg==
明文:www.k88.net
2、Base64算法定义
Base64是一种基于64个字符的编码算法,以任意8位字节序列组合的描述形式,这种形式不易直接识别。经Base64编码后的字符串的字符数是以4为单位的整数倍。
3、Base64密钥
索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 | 索引 | 对应字符 |
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | ||
14 | O | 31 | f | 48 | w | ||
15 | P | 32 | g | 49 | x | ||
16 | Q | 33 | h | 50 | y |
4、Base64编程使用
1)加密:
byte[] data = “www.k88.net”.getBytes();
String result = new BASE64Encoder().encode(data);
2)解密:
byte[] result = new BASE64Decoder().decodeBuffer(data);
Base64算法的实际应用
Base64 算法最早应用于解决电子邮件传输的问题,在早期,由于“历史问题”,电子邮件只允许 ASCII 码字符,如果要传送一封带有非 ASCII 码字符的电子邮件,当它通过一些网关的时候就可能出现问题。这个网关很可能会对这个非 ASCII 码字符的二进制位做调整,即将这个非 ASCII 码的 8 位二进制码的最高位置为 0,此用户收到的邮件就会是一封纯粹的乱码邮件,基于这个原因产生了 Base64 算法。
我们在java中要使用base64算法,可以使用sun公司提供的jar包。点击下载
以下是相关代码示例:
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.io.IOException; public class Main { //待加密的明文 public static final String DATA = "jikexueyuan"; public static void main(String[] args) throws Exception { /* Test Base64 */ String base64Result = Base64Util.encryptBase64(DATA.getBytes()); System.out.println(DATA + " >>>Base64编码>>>" + base64Result); String base64String = Base64Util.decryptBase64(base64Result); System.out.println(base64Result + " >>>Base64解码>>>" + base64String); } } |
Base64Util.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.io.IOException; import Decoder.BASE64Decoder; import Decoder.BASE64Encoder; public class Base64Util { public static String encryptBase64(byte[] data){ return new BASE64Encoder().encode(data); } public static String decryptBase64(String data) throws IOException{ byte[] resultBytes = new BASE64Decoder().decodeBuffer(data); return new String(resultBytes); } } |
java中Base64编码解码的编程使用