java加解密 + jwt的token

一、加解密

1、base64编码

		//基本加密
		String s = Base64.getEncoder().encodeToString("qwe".getBytes());

//基本解密
		String s1 = new String(Base64.getDecoder().decode(s));

2、aes加解密

		//基本加密
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128,new SecureRandom("123".getBytes()));
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] encoded = secretKey.getEncoded();
		SecretKeySpec key = new SecretKeySpec(encoded, "AES");
		Cipher aes1 = Cipher.getInstance("AES");
		aes1.init(Cipher.ENCRYPT_MODE,key);
		byte[] bytes = aes1.doFinal("要加密的内容".getBytes());

	//基本解密
			KeyGenerator kgen1 = KeyGenerator.getInstance("AES");
		kgen1.init(128, new SecureRandom("123".getBytes()));
		SecretKey secretKey1 = kgen1.generateKey();
		byte[] enCodeFormat1 = secretKey1.getEncoded();
		SecretKeySpec key1 = new SecretKeySpec(enCodeFormat1, "AES");
		Cipher cipher1 = Cipher.getInstance("AES");// 创建密码器
		cipher1.init(Cipher.DECRYPT_MODE, key1);// 初始化
		byte[] result1 = cipher1.doFinal(bytes);
		//切记不要直接输出byte[]也不toString();
		System.out.println(new String(result1));

RSA加密

//获取key
	KeyPairGenerator rsa = KeyPairGenerator.getInstance("RSA");
			rsa.initialize(1024);
			KeyPair keyPair = rsa.generateKeyPair();
			PrivateKey aPrivate = keyPair.getPrivate();
			System.out.println(aPrivate);
			PublicKey aPublic = keyPair.getPublic();
			System.out.println(aPublic);
//------------------------------------------------------------

			Cipher rsa1 = Cipher.getInstance("RSA");
			rsa1.init(Cipher.ENCRYPT_MODE,aPrivate);
			//加密
			byte[] bytes = rsa1.doFinal("私钥加密".getBytes());
			Cipher cipher = Cipher.getInstance("RSA");
			cipher.init(Cipher.DECRYPT_MODE,aPublic);
			//解密
			byte[] bytes1 = cipher.doFinal(bytes);

工具类


import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;

/**
 * 实现常用的加解密 方法,支持 SHA AES RSA Base64
 */
public class EncryptUtil {
    public static final String SHA1 = "SHA-1";
    public static final String SHA256 = "SHA-256";
    public static final String SHA384 = "SHA-384";
    public static final String SHA512 = "SHA-512";

    public static final String PUBKEY = "public_key";
    public static final String PRIKEY = "private_key";

    //1、编码格式
    //base64 编码
    public static String base64enc(String msg) {
        return Base64.getEncoder ().encodeToString (msg.getBytes ());
    }

    private static String base64encByte(byte[] msg) {
        return Base64.getEncoder ().encodeToString (msg);
    }

    private static byte[] base64decByte(String msg) {
        return Base64.getDecoder ().decode (msg);
    }

    //
    // base64 解码
    public static String base64dec(String msg) {
        return new String (Base64.getDecoder ().decode (msg));
    }

    //MD5 摘要
    public static String md5(String msg) {
        try {
            //创建摘要算法对象
            MessageDigest messageDigest = MessageDigest.getInstance ("MD5");
            messageDigest.update (msg.getBytes ());
            return base64encByte (messageDigest.digest ());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace ();
        }
        return null;
    }

    //SHA 摘要 SHA-1 SHA-256 SHA-384 SHA-512
    public static String sha(String type, String msg) {
        try {
            //创建摘要算法对象
            MessageDigest messageDigest = MessageDigest.getInstance (type);
            messageDigest.update (msg.getBytes ());
            return base64encByte (messageDigest.digest ());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace ();
        }
        return null;
    }

    //创建 对称加密---密钥
    public static String createAESKey() {
        try {
            //1、创建随机key
            KeyGenerator generator = KeyGenerator.getInstance ("AES");
            generator.init (128);
            SecretKey key = generator.generateKey ();
            return base64encByte (key.getEncoded ());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace ();
        }
        return null;
    }
    //AES 加密 返回的是base64格式
    public static String aesenc(String key, String msg) {
        SecretKeySpec secretKeySpec = new SecretKeySpec (base64decByte (key), "AES");
        try {
            Cipher cipher = Cipher.getInstance ("AES");
            cipher.init (Cipher.ENCRYPT_MODE, secretKeySpec);
            return base64encByte (cipher.doFinal (msg.getBytes ()));
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return null;
    }
    //AES 解密 返回的是base64格式
    public static String aesdec(String key, String msg) {
        SecretKeySpec secretKeySpec = new SecretKeySpec (base64decByte (key), "AES");
        try {
            Cipher cipher = Cipher.getInstance ("AES");
            cipher.init (Cipher.DECRYPT_MODE, secretKeySpec);
            return new String (cipher.doFinal (base64decByte (msg)));
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return null;
    }

    //创建-RSA 密钥 一对儿 公私钥
    public static HashMap<String, String> createRSAKey() {
        try {
            KeyPairGenerator generator = KeyPairGenerator.getInstance ("RSA");
            KeyPair keyPair = generator.generateKeyPair ();
            //创建使用私钥
            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate ();
            //创建使用公钥
            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic ();
            HashMap<String, String> keys = new HashMap<> ();
            keys.put (PUBKEY, base64encByte (publicKey.getEncoded ()));
            keys.put (PRIKEY, base64encByte (privateKey.getEncoded ()));
            return keys;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace ();
        }
        return null;
    }
    /**
     * rsa 公钥-加密*/
    public static String rsaEncPub(String key,String msg){
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(base64decByte(key));
        try {
            KeyFactory keyFactory = KeyFactory.getInstance ("RSA");
            PublicKey publicKey = keyFactory.generatePublic (keySpec);
            Cipher cipher = Cipher.getInstance ("RSA");
            cipher.init (Cipher.ENCRYPT_MODE, publicKey);
            return base64encByte(cipher.doFinal(msg.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    //RSA  私钥-加密
    public static String rsaEnc(String key, String msg) {
        try {
            //转换私钥
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec (base64decByte (key));
            KeyFactory keyFactory = KeyFactory.getInstance ("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate (keySpec);
            Cipher cipher = Cipher.getInstance ("RSA");
            cipher.init (Cipher.ENCRYPT_MODE, privateKey);
            return  base64encByte(cipher.doFinal(msg.getBytes()));
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return null;
    }
    //RSA  公钥-解密
    public static String rsaDec(String key, String msg) {
        try {
            //转换公钥
            X509EncodedKeySpec keySpec = new X509EncodedKeySpec (base64decByte (key));
            KeyFactory keyFactory = KeyFactory.getInstance ("RSA");
            PublicKey publicKey = keyFactory.generatePublic (keySpec);
            Cipher cipher = Cipher.getInstance ("RSA");
            cipher.init (Cipher.DECRYPT_MODE, publicKey);
            return new String (cipher.doFinal (base64decByte (msg)), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return null;
    }
    /**
     * RSA  私钥-解密
     */
    public static String rsaDecPri(String key, String msg) {
        try {
            //转换私钥
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec (base64decByte (key));
            KeyFactory keyFactory = KeyFactory.getInstance ("RSA");
            PrivateKey privateKey = keyFactory.generatePrivate (keySpec);
            Cipher cipher = Cipher.getInstance ("RSA");
            cipher.init (Cipher.DECRYPT_MODE, privateKey);
            return new String(cipher.doFinal(base64decByte(msg)),"UTF-8");
        } catch (Exception e) {
            e.printStackTrace ();
        }
        return null;
    }
}

jwt的token

导入jar包

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

生成token

			KeyGenerator aes = KeyGenerator.getInstance("AES");
			aes.init(128);
			SecretKey secretKey = aes.generateKey();
			Map<String, Object> claims = new HashMap<>();
			claims.put("userMobile", "186");
			claims.put("createDate", "2019-10-22");
			claims.put("userName", "name");
			claims.put("userCompany", "公司");
			claims.put("userCountry", "国家");

			long ttl = 60*1000;
			String token = Jwts.builder()
					.setClaims(claims)
					.setIssuedAt(new Date())
					.setExpiration(new Date(new Date().getTime() + ttl))
					.signWith(SignatureAlgorithm.HS256,secretKey) // 签名类型 与 密钥
					.compact();
			System.out.println(token);
			//解密
			Claims body = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
			System.out.println(body.get("userName"));

版权声明:本文为weixin_49390750原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。