- 简介:
AES:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
密钥:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。
- 对称加密算法:
加密过程:
将明文分成N个组,然后对各个组进行加密,形成各自的密文,最后把所有的分组密文 进行合并,形成最终的密文。
优点:
算法公开、计算量小、加密速度快、加密效率高
缺点:
交易双方都使用同样钥匙,安全性得不到保证
密钥管理困难,尤其是在分布式网络中
常用算法:
DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish - 代码实现:
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
//import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
public class AESTest {
/**
* 使用AES算法进行加密
* @param str
* @return
*/
public static byte[] jdkAESEncode(String str,Key key){
try {
//加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE,key);
byte [] result = cipher.doFinal(str.getBytes());
//String string = Base64.encode(result);
return result;//string;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
*使用AES对加密后的字符串进行解密
* @param str
* @return
*/
public static String jdkAESDecode(byte[] bytesContent,Key key){
try {
//加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE,key);
//byte [] bytesContent = Base64.decode(str);
byte [] result = cipher.doFinal(bytesContent);
return new String(result);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws NoSuchAlgorithmException
{
//生成key
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128,new SecureRandom());
//生成密钥
SecretKey secretKey = keyGenerator.generateKey();
byte[] bytes = secretKey.getEncoded();
//key转换
Key key = new SecretKeySpec(bytes ,"AES");
byte[] str = jdkAESEncode("welcome to first AES",key);
System.out.println(str);
System.out.println(jdkAESDecode(str,key));
}
}