生成的key是经过base64编码的字符串便于存储,Base64使用的编码协议为RFC4648
生成密钥
package com.taylor.test.manage.util;
import lombok.extern.slf4j.Slf4j;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;
/**
*
* Generates a key pair.
*
* Use keys to encrypt and decrypt data
*
*
* @author liyue
* @version v1
* @create 2019-11-29 15:57:32
* @copyright www.owinfo.net
*/
@Slf4j
public class SecretKey {
private static final String KEY_ALGORITHM = "RSA";
private static final int DEFAULT_KEY_SIZE = 1024;
private static final Base64.Encoder BASE64_ENCODER = Base64.getEncoder();
/**
* Generates a key pair.
* Using RAS algorithm, the default size is 1024
* This will generate a new key pair every time it is called.
*
* The generated KeyPair will be encoded using Base64 {@link Base64.Encoder}
*
* @return the generated key pair {@link KeyPair}
*/
public static KeyPair generate() throws GenerateKeyPairException {
KeyPairGenerator keyPairGen;
try {
keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
} catch (NoSuchAlgorithmException e) {
if (log.isDebugEnabled()) {
e.printStackTrace();
}
throw new GenerateKeyPairException("Failed to generate keyPair, " +
"because RSA algorithm is not supported, " + e.toString());
}
keyPairGen.initialize(DEFAULT_KEY_SIZE);
java.security.KeyPair keyPair = keyPairGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
KeyPair pair = new KeyPair();
pair.setPublicKey(BASE64_ENCODER.encodeToString(publicKey.getEncoded()));
pair.setPrivateKey(BASE64_ENCODER.encodeToString(privateKey.getEncoded()));
return pair;
}
}
加密
package com.taylor.test.restful.util;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security