Base64密码加解密的学习
密码学的基本功能
- 机密性
- 鉴别
- 报文的完整性
- 不可否认性
基本模型
密码学的分类
- 消息编码:Base64
- 消息摘要:MD类、SHA类、MAC
- 对称密码:DES、3DES、AES
- 非对称加密:RSA、DH密钥交换
- 数字签名:RSASignature、DSASignature
密码学五元组
明文、密文、加密算法、解密算法、密钥
其中加密算法和解密算法是公开的,密码的强度依赖于密钥。
密钥与密码的区别
密码 != 密钥
key != password
密钥 + 规则 = 密码
对于密码破解者而言,拿到了密钥就等于有了密码!
如下,AES加密算法是公开的,但是重点在密钥:
AES加密密钥:123456
password >>> AES加密 >>> U2FsdGVkX19/Q43kbdBxoKUMB1IJKRg34QaBJxcEyao=
U2FsdGVkX19/Q43kbdBxoKUMB1IJKRg34QaBJxcEyao= >>> AES解密 >>> password
而当你更换了加密密钥之后,再进行解密此时你将得不到原来的密码了。
对称密码与非对称密码
对称密码:加解密使用相同的密码机制
非对称密码:加解密使用不同的密钥——公钥与私钥
Java编程中常用的类
- 消息编码
BASE64Encoder、BASE64Decoder - 消息摘要
MessageDigest - 对称密码
KeyGenerator、SecretKey、Cipher - 非对称密码
KeyPairGenerator、KeyFactory、keyPair、PublicKey、PrivateKey、Cipher - 数字签名
Signature
Base64算法的编程使用
- Base64编码示例
密文:ZmFuY2hlbg==
明文:fanchen Base64算法的定义
Base64是一种基于64个字符的编码算法,以任意的8位字节序列组合的描述形式,这种形式不易直接识别。经过Base64编码后的字符串的字符数是以4为单位的整数倍。
Base64编程使用
1). 加密
byte[] data = “fanchen”.getBytes();
String result = new BASE64Encoder().encode(data);
2). 解密
byte[] result = new BASE64Decoder().decodebuffer(data);
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
/**
* created by chen
* on 2017/9/22 17:47
*/
public class Base64 {
/**
* 获得经过Base64加密的字符串
* @param source 待加密的字符串
* @return 加密后的字符串
*/
public static String getEncrypt(String source){
return new BASE64Encoder().encode(source.getBytes());
}
/**
* 得到解密后的数据
* @param source 待解密的字符串
* @return 解密后的字符串
*/
public static String getDecode(String source){
try {
return new String(new BASE64Decoder().decodeBuffer(source));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}