对称加密
对称加密、解密都使用同一个密钥,需要对密钥安全控制。
加解密效率较高。
非对称加密
非对称加密有一堆密钥,一把私钥,一把公钥。非对称加密中,发送密文一方用对方的公钥进行加密,对方收到后用自己的私钥解密。
非对称加密通常使用与一对多情况,一对多时服务器只需要拥有一个私钥就可以给多个客户端进行加密通信。
两者结合
通信的双方用非对称加密将对称加密的密钥进行加密,这样在密钥被加密的情况下可以用对称加密方式进行通信。
对称加密使用:
private SecretKey secretKey;
public Code(String secret) throws Exception {
DESKeySpec keySpec = new DESKeySpec(secret.getBytes("UTF-8"));
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");
this.secretKey = secretKeyFactory.generateSecret(keySpec);
}
首先加密需要一个秘钥,根据该秘钥(因为常用汉字编码是UTF-8)以UTF-8格式获取字节串,将其生成一个DESKeySpec。
根据DES获取一个secretKeyFactory 对象,依据keySpec 生成对应SecretKey,这就完成了加密前的布局工作。
加密字符串:
public String encode(String data) throws Exception {
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, random);
byte[] tmp = cipher.doFinal(data.getBytes("UTF-8"));
byte[] temp = Base64.encodeBase64URLSafe(tmp);
encode = new String(temp);
return encode;
}
主要容易出错点就是每次获取字节串都要注意编码格式是否和之前相同。
加密结果及加密对象都是字节串,所以字符串加密前及加密后都需要进行字节串与字符串的转换。
Base64有许多加密手法,其中URLSafe加密出的字符串可以无障碍给文件命名,方便后期给文件加密且命名的操作。