Base64本质不是加密码算法。
安全和密码
常用安全体系
对称加密:指加密密钥与解密密钥相同。
非对称加密:指加密密钥与解密密钥不同,密钥分公钥、私钥。
散列函数:用来验证数据的完整性。
特点:长度不受限制,哈希值容易计算,散列运算过程不可逆。
比如:消息摘要算法MD5等,SHA–安全散列算法,MAC–消息认证算法。
数字签名:主要是针对以数字的形式存储的消息进行的处理。
Base64算法
E-mail、密钥、证书文件
邮件的历史问题,在网络传输过程中,如果为非ASCII码则会出现乱码问题,
定义:基于64个字符的编码算法,
/**
* 基于JDK
*/
public static void jdkBase64(String src){
BASE64Encoder encoder=new BASE64Encoder();
String encode = encoder.encode(src.getBytes());
System.out.println("encode:"+encode);
BASE64Decoder decoder=new BASE64Decoder();
try {
System.out.println("decode:"+new String(decoder.decodeBuffer(encode)));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 基于commons
*/
public static void commonsCodesBase64(String src){
byte[] encodeBytes= Base64.encodeBase64(src.getBytes());
System.out.println("encode:"+new String(encodeBytes));
byte[] decodeBytes = Base64.decodeBase64(encodeBytes);
System.out.println("decode:"+new String(decodeBytes));
}
DES:
密钥长度为56.
消息摘要算法
MD应用场景:
JDK代码实现:
public static void jdkMd5(String src){
try {
MessageDigest md=MessageDigest.getInstance("MD5");
byte[] md5Bytes=md.digest(src.getBytes());
System.out.println("JDK MD5:"+Hex.encodeHexString(md5Bytes));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
SHA
安全散列算法
固定长度摘要算法
实现:
/**
* JDK实现
*/
public static void jdkSHA1(String src){
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(src.getBytes());
System.out.println("jdk sha-1:"+ Hex.encodeHexString(md.digest()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
MAC
HMAC含有密钥的消息摘要算法。
public static void jdkHmacMD5(String src){
try {
//初始化
KeyGenerator keyGenerator=KeyGenerator.getInstance("HmacMD5");
SecretKey secretKey = keyGenerator.generateKey();
//获取密钥----密钥不同,加密后的结果不同
byte[] key=Hex.decodeHex(new char[]{'a','a','a','a','a','a','a','a'});
//还原密钥
SecretKey restoreSecretKey=new SecretKeySpec(key,"HmacMD5");
//实例化MAC
Mac mac= Mac.getInstance(restoreSecretKey.getAlgorithm());
mac.init(restoreSecretKey);
byte[] hmacMD5bytes = mac.doFinal(src.getBytes());
System.out.println("JDK hmacMD5:"+ Hex.encodeHexString(hmacMD5bytes));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
} catch (DecoderException e) {
}
}
学习自某课网