RSA加密解密工具类

/**
     * 测试方法
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        /**
         * 1,先生成公钥和私钥
         * 2,再测试加密解密
         */
        String password = "duxiaowen123456";
        String algorithm = "RSA";

        String encdePassword = encodePassword(password, algorithm);
        System.out.println("加密后的密文:"+encdePassword);
        String decodePassword = decodePassword(encdePassword,algorithm);
        System.out.println("加密后的密码:"+decodePassword);
    }


    /**
     * 生成公钥和私钥
     * @param algorithm
     * @throws NoSuchAlgorithmException
     */
    private static void generateKey(String algorithm) throws NoSuchAlgorithmException {
        KeyPairGenerator instance = KeyPairGenerator.getInstance(algorithm);
        KeyPair keyPair = instance.generateKeyPair();
        String priKey = Base64.encode(keyPair.getPrivate().getEncoded());
        String pubKey = Base64.encode(keyPair.getPublic().getEncoded());
    }

    /**
     * 获取公钥对象
     * @param algorithm
     * @param pubKey
     * @return
     * @throws Base64DecodingException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeySpecException
     */
    private static Key getPublicKey(String algorithm, String pubKey) throws Base64DecodingException, NoSuchAlgorithmException, InvalidKeySpecException {
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decode(pubKey));
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePublic(x509EncodedKeySpec);
    }

    /**
     * 获取私钥对象
     * @param algorithm 加密规则
     * @param priKey   私钥字符串
     * @return
     * @throws Base64DecodingException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeySpecException
     */
    private static PrivateKey getPrivateKey(String algorithm, String priKey) throws Base64DecodingException, NoSuchAlgorithmException, InvalidKeySpecException {
        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decode(priKey));
        KeyFactory kf = KeyFactory.getInstance(algorithm);
        return kf.generatePrivate(pkcs8EncodedKeySpec);
    }

    /**
     * 加密
     * @param password
     * @param algorithm
     * @return
     * @throws NoSuchAlgorithmException
     * @throws NoSuchPaddingException
     * @throws Base64DecodingException
     * @throws InvalidKeySpecException
     * @throws InvalidKeyException
     * @throws IllegalBlockSizeException
     * @throws BadPaddingException
     */
    public static String encodePassword(String password, String algorithm) throws NoSuchAlgorithmException, NoSuchPaddingException, Base64DecodingException, InvalidKeySpecException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        Cipher cipher = Cipher.getInstance(algorithm);
        String  pubKey =    "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJ6tjX6FEUVViNAnEgi6jNc3b1uen7lH0IGHCR" +
                "9J1o0iAq5i3oVkDlZaPWBcDiaHSRm/A0MoOTZEDbY/Bu+hCh38Yhq27Kk1/BvXsZeZr2QDALhrrJ" +
                "4uLvfccrHDZMT1BMZ4dvXwuIY97uznVvMCEYOL6DK0F7cd0EB+dB4ziDJwIDAQAB";
        cipher.init(Cipher.ENCRYPT_MODE,getPublicKey(algorithm,pubKey));

        byte[] bytes = cipher.doFinal(password.getBytes());
        return Base64.encode(bytes);
    }

    /**
     * 解密
     * @param encodePassword
     * @param algorithm
     * @return
     */
    public static String decodePassword(String encodePassword, String algorithm) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, Base64DecodingException, BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException {
        Cipher cipher = Cipher.getInstance(algorithm);

        String priKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAInq2NfoURRVWI0CcSCLqM1zdvW5" +
                "6fuUfQgYcJH0nWjSICrmLehWQOVlo9YFwOJodJGb8DQyg5NkQNtj8G76EKHfxiGrbsqTX8G9exl5" +
                "mvZAMAuGusni4u99xyscNkxPUExnh29fC4hj3u7OdW8wIRg4voMrQXtx3QQH50HjOIMnAgMBAAEC" +
                "gYBgfE0R13SJrh+SHug35ZzFhwbtaBBasgo61KZEZgaNo5tfh8MMLPOfyNiyzTmg64TJrXeBfOlx" +
                "/wwksCkv6oAhSCumD+opBwLYqq+XWl7wjAS2GWQo/6Zl7GcwJuIpzOABRj0FqfqSrOZgY9+rwky2" +
                "qJCrcmBDhInG/09IYWomsQJBAMAP3hBjofzSzGaE4/5AB8vAvcBMsceqbf44agnXPUktG/8ceD7a" +
                "UjJsvvAvig5ISVabmVPnBoZYbE2yM7eZ5c8CQQC31JqQ8+/Y3fo3fGGdSlUAoW6mhMW44CHCIS9m" +
                "+LEUoih46PP4ljm93FtDHfr2y42TnmS8HOM2f2tZTw9FpDspAkEAn7zSuZjUAj2kiOOf6DeDBGCi" +
                "sMxY1DKYVua+sr6Ul0bwUQZxr/zOfmfZilRPoz9V17WEGbc8wwHJ2fkLcHmMGwJACA/Av36TFBWX" +
                "9Xr05Orvk1mA+rhz20mo8VR3ObLKQTdjQvokSNB9s7/IGMdlzBDdIo4dqMozhJ5N3NrEtq8fEQJA" +
                "QFgtEuY6rZ23SBHLXNLqVMIGjw21Xr//QK17m1HUpdOcJvvOmtMFTDXg4tjZhUpgncnKgEYgKAr1" +
                "VD2XREwV+A==";
        PrivateKey privateKey = getPrivateKey(algorithm, priKey);
        cipher.init(Cipher.DECRYPT_MODE,privateKey);

        byte[] bytes = cipher.doFinal(Base64.decode(encodePassword));
        return new String(bytes);
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java RSA加密工具类的代码示例: import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.SecureRandom; import javax.crypto.Cipher; public class RSAUtils { // 生成密钥对 public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); SecureRandom secureRandom = new SecureRandom(); keyPairGenerator.initialize(2048, secureRandom); // 密钥长度为2048位 return keyPairGenerator.generateKeyPair(); } // 加密 public static byte[] encrypt(byte[] input, PublicKey publicKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, publicKey); return cipher.doFinal(input); } // 解密 public static byte[] decrypt(byte[] input, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, privateKey); return cipher.doFinal(input); } } 使用方法: // 生成密钥对 KeyPair keyPair = RSAUtils.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); // 加密 byte[] data = "Hello, world!".getBytes(); byte[] encrypted = RSAUtils.encrypt(data, publicKey); // 解密 byte[] decrypted = RSAUtils.decrypt(encrypted, privateKey); String message = new String(decrypted); System.out.println(message); // 输出:Hello, world!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值