目录
HTTP是应用层协议,它以TCP(传输层)作为底层协议,默认端口为80
- 服务器在80端口等待客户的请求。
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接收来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP 消息
- 关闭TCP连接
对称密钥加密( Symmetric-Key Encryption ),加密和解密使用同一密钥。
- package demo;
-
- import java.security.InvalidAlgorithmParameterException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.security.SecureRandom;
- import java.util.Arrays;
- import java.util.Base64;
-
- import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.IvParameterSpec;
- import javax.crypto.spec.SecretKeySpec;
-
- public class AesKit {
- //加密
- public static String encry(String content ,String key) {
- String result = "";
- try {
- //将原始加密内容转换为字节数组
- byte[] source = content.getBytes();
-
- //创建AES加密算法对象
-
- //设置填充方式为PKCS5Padding
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
-
- //创建密钥
- SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
-
- //初始化
- //参数1:操作模式,Cipher.ENCRYPT_MODE代表加密操作,Cipher.DECRYPT_MODE代表解密
- //参数2:密钥
- cipher.init(Cipher.ENCRYPT_MODE, secretKey);
-
- //执行最终操作(加密)
- byte[] resultByteArray = cipher.doFinal(source);
-
- //将加密结果(字节数组)使用Base64编码成字符串内容
- result = Base64.getEncoder().encodeToString(resultByteArray);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- }
- return result;
- }
-
-
- //解密
- public static String decry(String content ,String key) {
- byte[] source = Base64.getDecoder().decode(content);
- String result = "";
- try {
- //创建AES加密算法对象
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
-
- //创建密钥
- SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
-
- //初始化
- //参数1:操作模式,Cipher.ENCRYPT_MODE代表加密操作,Cipher.DECRYPT_MODE代表解密
- //参数2:密钥
- cipher.init(Cipher.DECRYPT_MODE, secretKey);
-
- //执行最终操作(解密)
- byte[] resultByteArray = cipher.doFinal(source);
-
- //将解密结果(字节数组)转成字符串内容
- result = new String(resultByteArray);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- }
- return result;
- }
- }
非对称密钥加密,又称公开密钥加密( Public-Key Encryption ),加密和解密使用不同的密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥铝无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。
- package demo;
-
- import java.security.GeneralSecurityException;
- import java.security.InvalidKeyException;
- import java.security.KeyPair;
- import java.security.KeyPairGenerator;
- import java.security.NoSuchAlgorithmException;
- import java.security.PrivateKey;
- import java.security.PublicKey;
-
- import javax.crypto.Cipher;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
-
- public class RsaKit {
- //私钥
- PrivateKey sk;
-
- //公钥
- PublicKey pk;
-
- //构造方法
- public RsaKit() throws GeneralSecurityException {
- //创建密钥生成器
- KeyPairGenerator kpGen = KeyPairGenerator.getInstance("RSA");
- kpGen.initialize(1024);//设置长度
-
- //生成"密钥对"
- KeyPair kp = kpGen.generateKeyPair();
-
- //通过"密钥对",分别获取公钥和私钥
- this.sk = kp.getPrivate();
- this.pk = kp.getPublic();
- }
-
- //把私钥导出为字节
- public byte[] getPrivateKey() {
- return this.sk.getEncoded();
- }
-
- //把公钥导出为字节
- public byte[] getPublicKey() {
- return this.pk.getEncoded();
- }
-
- //用公钥加密
- public byte[] encrypt(byte[] message) throws GeneralSecurityException {
- //创建RSA加密算法对象
- Cipher cipher = Cipher.getInstance("RSA");
-
- //初始化
- //参数1:操作模式,Cipher.ENCRYPT_MODE代表加密操作,Cipher.DECRYPT_MODE代表解密
- //参数2:公钥
- cipher.init(Cipher.ENCRYPT_MODE, this.pk);
-
- //执行最终操作(加密)
- byte[] resultByteArray = cipher.doFinal(message);
-
- return resultByteArray;
- }
-
- //用私钥解密
- public byte[] decrypt(byte[] input) throws GeneralSecurityException {
- //创建RSA加密算法对象
- Cipher cipher = Cipher.getInstance("RSA");
-
- //初始化
- //参数1:操作模式,Cipher.ENCRYPT_MODE代表加密操作,Cipher.DECRYPT_MODE代表解密
- //参数2:私钥
- cipher.init(Cipher.DECRYPT_MODE, this.sk);
-
- //执行最终操作(解密)
- return cipher.doFinal(input);
-
-
- }
-
- }