java RAS加密解密(简单)
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
public class RASUtil {
static final String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvkosc8DZyVo9TOoOOdYxpGTjSJqyrBoOLEciY\n" +
"HW+3g9bVdrU1urxparXV5mcDpB0ebhocjjYWQPiAlyK1SgwzC7Y8TXnsbmqh+1U7K3JIXSQc+ajA\n" +
"NnuDgfmCnfJ9S8MY28AjdN8ahrmPBL1S4V/GQSxX9zhmh2LLupdpqheEuQIDAQAB";
static final String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAK+SixzwNnJWj1M6g451jGkZONIm\n" +
"rKsGg4sRyJgdb7eD1tV2tTW6vGlqtdXmZwOkHR5uGhyONhZA+ICXIrVKDDMLtjxNeexuaqH7VTsr\n" +
"ckhdJBz5qMA2e4OB+YKd8n1LwxjbwCN03xqGuY8EvVLhX8ZBLFf3OGaHYsu6l2mqF4S5AgMBAAEC\n" +
"gYAV37cPOuo9ooUmxGKBjCmbKnZG0GSwxhX7bJLGSNyTS4yneaun7wTsSUwwQw1QidDK6sK8Dge1\n" +
"DBEpzCqZ1YjhWYEOskocnPzTZJROE9kaTr7ZVzNsxInD8Q9hA0jgoQW6rKbaUSKwtBI4AtIqx48k\n" +
"HdXkCVlRiyvGt4q9tZGFNQJBAP4bTZDwwiunVy+i7/ziAANA9XDyO1n074vFj1PjV6RRTty2UPfb\n" +
"EnAjNo7ujs+0HhpW65IrhRIK93XU1T91UqMCQQCw4XCfWhNOmcS3U4X27+fJoC5WDaahUFpfAdBn\n" +
"ULWpwN8l1ldNK5rEQYA3CF/fUc7vvuJms27YuR9BfCb70tzzAkA+inXC0J7Zo6wfu1iZwv4BzwEZ\n" +
"tWTKNTCoFA28td2iQajJRc4T0sVs+B27fBeGI2ytSutb5H4x/KT/SUza+4NFAkBihxGPEkPS8sCr\n" +
"RfFHnldE7t8gvDXngbT1WzNVeZXX20Hx97VlnTZ2v+3Fufp9kTpuPawrfSPvwR7yAVBN0iWVAkEA\n" +
"9jSaz/1MSObhHf1yt2l0mBbrhmzxjKFtmhfhOHj93LhTvLaM6cbRJilMNjWfZnMEJ/KOty1xT1Zm\n" +
"WNABOQg1nA==";
/**
* 加密
*
* @param rawPassword
* @return
*/
@SneakyThrows
public static String encode(CharSequence rawPassword) {
//base64编码的公钥
byte[] decoded = Base64.decodeBase64(publicKey);
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
return Base64.encodeBase64String(cipher.doFinal(rawPassword.toString().getBytes("UTF-8")));
}
/**
* 解密
*
* @param rawPassword
* @return
*/
@SneakyThrows
public static String matches(CharSequence rawPassword) {
//64位解码加密后的字符串
byte[] inputByte = Base64.decodeBase64(rawPassword.toString().getBytes("UTF-8"));
//base64编码的私钥
byte[] decoded = Base64.decodeBase64(privateKey);
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
return new String(cipher.doFinal(inputByte));
}
/**
* 公钥私钥获取
*/
public static final String KEY_ALGORITHM = "RSA";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
private static final String PUBLIC_KEY = "RSAPublicKey";
private static final String PRIVATE_KEY = "RSAPrivateKey";
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
byte[] publicKey = key.getEncoded();
return encryptBASE64(key.getEncoded());
}
public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PRIVATE_KEY);
byte[] privateKey = key.getEncoded();
return encryptBASE64(key.getEncoded());
}
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
public static Map<String, Object> initKey() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, Object> keyMap = new HashMap<String, Object>(2);
keyMap.put(PUBLIC_KEY, publicKey);
keyMap.put(PRIVATE_KEY, privateKey);
return keyMap;
}
public static void main(String[] args) {
// Map<String, Object> keyMap;
// try {
// keyMap = initKey();
// String publicKey = getPublicKey(keyMap);
// System.out.println(publicKey);
// String privateKey = getPrivateKey(keyMap);
// System.out.println(privateKey);
// } catch (Exception e) {
// e.printStackTrace();
// }
String aa = "669933412";
System.out.println("未加密:" + aa);
String s = encode(aa);
System.out.println("加密后:" + s);
String s1 = matches(s);
System.out.println("解密后:" + s1);
}
自测:
以上!