程序员在使用加密和解密,一般情况下是为了登录或者某些重要的信息而做的特殊处理。
(一)简单的java加密算法有:
1.BASE64 严格地说,属于编码格式,而非加密算法
2.MD5(Message Digest algorithm 5,信息摘要算法)
3.SHA(Secure Hash Algorithm,安全散列算法)
4.HMAC(Hash Message Authentication Code,散列消息鉴别码)
(二)对称算法和不对称算法
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是非对称加密算法
(二)代码
1.加密代码:
加密前字符串:String key="mykey";
byte[] bt = key.getBytes();
加密后字符串:String newKey=(new BASE64Encoder()).encodeBuffer(bt);
- 1
- 2
- 3
2.解密代码:
加密后的字符串:String newkey="*****";
byte[] bt = (new BASE64Decoder()).decodeBuffer(key); 解密后的字符串: String key=new String(bt);
//如果出现乱码可以改成: String(bt, "utf-8")或 gbk
- 1
- 2
- 3
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);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
程序运行后结果:
原字符串:我的字符串seasonszx
加密后:5oiR55qE5a2X56ym5Liyc2Vhc29uc3p4
解密后:我的字符串seasonszx