java RAS加密解密(简单)

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);

    }

自测:
在这里插入图片描述
以上!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值