Java加密-Base64、消息摘要算法
本⽂内容来⾃系列课程
Java加密
散列函数:散列函数⽤来验证数据的完整性。散列函数相关算法:
消息摘要算法MD5
SHA 安全散列算法
MAC 消息认证码算法
数字签名:主要是针对以数字的形式存储的消息进⾏的处理。数字签名会产⽣⼀种带有操作者⾝份的信息的编码。Java安全组成
JCA(Java Cryptography Architecture)提供基本的加密框架,例如消息摘要,数字签名等
JCE(Java Cryptography Extension)在JCA的基础上做了些扩展,DES、AES、RSA算法通过JCE提供JSSE(Java Secure Socket Extension)提供基于SSL的加密功能,主要⽤于⽹络传输
JAAS(Java Authentication and Authentication Service)
JDK相关java包、类:
java.security
消息摘要
安全消息摘要,消息认证(鉴别)码
java.ssl
安全套接字
第三⽅java扩展:
Bouncy Castle
两种⽀持⽅案:1.配置 2.调⽤
Commons Codec Apache提供的包
Apache
Base64、⼆进制、⼗六进制、字符集编码
Url编码/解码
Base64算法
Base64算法实现有如下⼏种⽅式:
Jdk
Commons Codec
Bouncy Castle
应⽤场景:e-mail、密钥、证书⽂件
Jdk⽅式:
/
**
* jdk⽅式
*/
public static void jdkBase64() {
try {
BASE64Encoder encoder = new BASE64Encoder();
String encode = Bytes());
System.out.println("encode:"+encode);
BASE64Decoder decoder = new BASE64Decoder();
System.out.println("decode:"+ new String(decoder.decodeBuffer(encode)));
} catch (IOException e) {
e.printStackTrace();
}
}
cc⽅式,使⽤到了commons-codec-1.10.jar
/**
* cc⽅式
*/
public static void commonsCodesBase64() {
byte[] encodeBytes = Bytes());
System.out.println("encode : " + new String(encodeBytes));
byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
System.out.println("decode : " + new String(decodeBytes));
}
bc⽅式,使⽤到了bcprov-jdk15on-149.jar和bcprov-ext-jdk15on-149.jar
/**
* bc⽅式
*/
public static void  bouncyCastleBase64() {
byte[] encodeBytes = org.Bytes());
System.out.println("encode : " + new String(encodeBytes));
byte[] decodeBytes = org.ders.Base64.decode(encodeBytes);
System.out.println("decode : " + new String(decodeBytes));
}
消息摘要算法
⽤来验证数据完整性,消息摘要算法是数字签名核⼼算法
MD
128位摘要信息
JDK提供了MD2和MD5实现, bc提供了MD4的实现。cc提供了MD2和MD5,它只是提供了对JDK中MD2和MD5的封装。
算法摘要长度实现⽅法
MD2128JDK
MD4128Bouncy Castle
MD5128JDK
jdk md5⽅式:
public static void jdkMD5() {
try {
MessageDigest md = Instance("MD5");
byte[] md5Bytes = md.Bytes());
System.out.println("JDK MD5 : " + deHexString(md5Bytes));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//JDK MD2 : 54ade03d9765c9f0290189a2ae704ee7
}
cc md5⽅式
/
**
* cc md5
*/
public static void ccMD5() {
java加密方式有哪些System.out.println("cc MD5 : " + DigestUtils.Bytes()));
}
bc md5⽅式
/**
* bc MD5
*/
public static void bcMD5(){
Digest digest = new MD5Digest();
digest.Bytes(), 0, Bytes().length);
byte[] md5Bytes = new DigestSize()];
digest.doFinal(md5Bytes, 0);
System.out.println("BC MD5 : " + org.HexString(md5Bytes));    //BC MD5 : 89048f19b72e7367b7faacfe659a8de0
}
MD应⽤
例如⽤户注册与验证
SHA
SHA安全散列算法的简称,长度跟MD5⼀样,都是固定长度摘要信息。包括SHA-1, SHA-2(SHA-224, SHA-256, SHA-384, SHA-512)
算法摘要长度实现⽅法
SHA-1160JDK
SHA-224224Bouncy Castle
SHA-256256JDK
SHA-384384JDK
SHA-512512JDK
JDK 实现SHA-1
public static void jdkSHA1() {
try {
MessageDigest md =Instance("SHA");
md.Bytes());
System.out.println("jdk sha-1 : " + deHexString(md.digest()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
//jdk sha-1 : 8bb95fe138f7e9d993dd90bae339a45e56b72eb7
}
bc⽅式实现SHA-1
public static void bcSHA1() {
Digest digest = new SHA1Digest();
digest.Bytes(), 0, Bytes().length);
byte[] sha1Bytes = new DigestSize()];
digest.doFinal(sha1Bytes, 0);
System.out.println("bc sha-1 : " + org.HexString(sha1Bytes));
/
/bc sha-1 : 8bb95fe138f7e9d993dd90bae339a45e56b72eb7
}
cc⽅式显⽰SHA-1
public static void ccSHA1(){
System.out.println("cc SHA1 : " + DigestUtils.sha1Hex(src));
//cc SHA1 : 8bb95fe138f7e9d993dd90bae339a45e56b72eb7
}
SHA应⽤
消息鉴别是指在接收⽅将原始信息进⾏摘要,然后与接收到的摘要信息进⾏⽐对。MAC
MAC消息认证码算法,也称为HMAC含有密钥的散列函数算法,融合MD、SHA。
jdk⽅式实现HmacMD5