一、加解密
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版权协议,转载请附上原文出处链接和本声明。