Java代码Base64加密解密使用
程序中有时候需要把用户名和密码保存到本地,下次登录时自动获取,如果是直接使用字符串保存,肯定容易泄露密码,这就需要经过加密,但是登录时还要获取密码,这就需要解密,这个Base64类就能简单的实现这个功能。
一.简单介绍一下加密的知识:
不想讲太多高深的知识,讲一点基础的。
(一)简单的java加密算法有:
1.BASE64 严格地说,属于编码格式,而非加密算法
2.MD5(Message Digest algorithm 5,信息摘要算法)
3.SHA(Secure Hash Algorithm,安全散列算法)
4.HMAC(Hash Message Authentication Code,散列消息鉴别码)
上面的加密我也是用得比较少,其实用起来并不难,使用的话,都要导入对应的jar,具体的操作代码网上都是可以查到的,发生类错误就是导的包不对!每一种jar包都有不同的版本!
(二)对称算法和不对称算法
1. 对称加密(Symmetric Cryptography)
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
对称加密解密时间都是非常快的。
2.非对称加密(Asymmetric Cryptography)
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个(公钥)进行加密,而解密则需要另一个(私钥)密钥。
非对称解密是非常慢的,很简单的数据可能都要几个小时!
3.常见的对称加密和非对称加密算法
(1)对称加密算法:
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;
(2)非对称常用算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
(三)其他
Base64还不算加密算法,其实就是一种编码转换;
MD5、SHA是非对称加密算法
二.Base64的编码示例
(一)导入jar包:BASE64Decoder jar包
下载地址:http://download.csdn.net/detail/wenzhi20102321/9805051
(二)代码
1.加密代码:
加密前字符串:String key="mykey";
byte[] bt = key.getBytes();
加密后字符串:String newKey=(new BASE64Encoder()).encodeBuffer(bt);
2.解密代码:
加密后的字符串:String newkey="*****";
byte[] bt = (new BASE64Decoder()).decodeBuffer(key); 解密后的字符串: String key=new String(bt);
//如果出现乱码可以改成: String(bt, "utf-8")或 gbk
3.具体调用代码示例
package com.example.encryption;
import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;
import java.io.IOException;
/**
* 加密解密程序示例
* <p/>
* <p/>
* /**
* 编码工具类
* 1.将byte[]转为各种进制的字符串
* 2.base 64 encode
* 3.base 64 decode
* 4.获取byte[]的md5值
* 5.获取字符串md5值
* 6.结合base64实现md5加密
* 7.AES加密
* 8.AES加密为base 64 code
* 9.AES解密
* 10.将base 64 code AES解密
*
* @author uikoo9
* @version 0.0.7.20140601
*/
public class EncryptionDemo {
public static void main(String[] args) {
String s = "我的字符串seasonszx";
System.out.println("原字符串:" + s);
String encryptString = encryptBASE64(s);
System.out.println("加密后:" + encryptString);
System.out.println("解密后:" + decryptBASE64(encryptString));
}
/**
* BASE64解密
*
* @param key
* @return
* @throws Exception
*/
public static String decryptBASE64(String key) {
byte[] bt;
try {
bt = (new BASE64Decoder()).decodeBuffer(key);
return new String(bt);//如果出现乱码可以改成: String(bt, "utf-8")或 gbk
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
/**
* BASE64加密
*
* @param key
* @return
* @throws Exception
*/
public static String encryptBASE64(String key) {
byte[] bt = key.getBytes();
return (new BASE64Encoder()).encodeBuffer(bt);
}
}
程序运行后结果:
原字符串:我的字符串seasonszx
加密后:5oiR55qE5a2X56ym5Liyc2Vhc29uc3p4
解密后:我的字符串seasonszx
这就是Base64加密解密,加密后的字符串,一般都是不能识别的。同时也是很方便解密。也可以把上面的代码封装成一个工具类以后使用。
其他几种加密算法,大家有兴趣也可以去试试!
共勉:我有手有脚,身体健康,只要努力,一定可以比别人活得更好。