zoukankan      html  css  js  c++  java
  • RSA对称加密

    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.security.InvalidKeyException;
    import java.security.KeyFactory;
    import java.security.NoSuchAlgorithmException;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.spec.InvalidKeySpecException;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    import java.util.Base64;

    import javax.crypto.BadPaddingException;
    import javax.crypto.Cipher;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.NoSuchPaddingException;



    public class TestRSA {

    public static String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQgEoj3z9JrdPNI23DbMQkl3gkGuDke7iBr5yrYyqolkTyxuBLWFwHNuGv4VKOj9fXg61QxpaJ/fxDBvMvmkBSRowHBloGFceVTx8wV/8u0DcjvTCu0IZ1zp6wjG6xBn5j66Sg/q+9hvaY2p7fkKmsvcW6VoNPgQHU1Cf01DLZmQIDAQAB+oXcINOiE3AsuZ4VJmwNZg9Y/7fY+OFRS2JAh5YMsrv2qyoGP+Z9ksre26NYR+Lt91B2lhdwJHLpQpziaANZm/ONb31fj/lwIDAQAB";
    public static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBANCASiPfP0mt080jbcNsxCSXeCQa4OR7uIGvnKtjKqiWRPLG4EtYXAc24a/hUo6P19eDrVDGlon9/EMG8y+aQFJGjAcGWgYVx5VPHzBX/y7QNyO9MK7QhnXOnrCMbrEGfmPrpKD+r72G9pjant+Qqay9xbpWg0+BAdTUJ/TUMtmZAgMBAAECgYBSozY/Z4FW+31h5fPgK+DFu/8TGFAgXuTvCaJnz2Md9IkZTDejxT6cYWUr53toI5zhvz/XLw6FXNQ54KxMJq/s9PiZYUgq/PMrnyU4gBSTm5BmiWjdaGicVEZ1lofHjpkAchPNW/CzwxD8AeKI7QaObE+EkWbLAi6sa+nRdHKgrQJBAOwYLD2DncU15XCKS0RNzTrNohdBQcisOPHdtQO0CGZlxx3xjuU4WL6/EpdmbjTeYbOSDKCmY5vyVbYZdOWfEs8CQQDiFIwWpvW2WLxLVw3i2P55WmMMXuecwEzg++ae3Ht7nW0zNcWSsyvHh40sM8XqEzmWOzMY6JOePbkuVfWTc4cXAkBRzf5mQhiEoKwjVofF3v9hhKbJT/8vPR1uENgLtHHEqTdZFL3ihqeZUDNs6jz9bKCFy/E8KOsSueEg+6kZdwjZAkEAj2RW4fstd2VasDJb5ViaNqAEmJENOBej60L6KCJR07qqy0M8t+oaR2iLOtDvo6Jj8QxFQXQqRMCDVodAxjANKwJAL3KuaqA6kdy9RxdV3uP8nRXLY7C/1ZIK6U0pyZqKXEwpD+7Ar3hwwhPz9TeuoqjB/cCknZjw70BQFQ0/VUHW2g==";

    private static String algorithm = "RSA"; //$NON-NLS-1$
    private static final int MAX_ENCRYPT_BLOCK = 117;
    private static final int MAX_DECRYPT_BLOCK = 128;
    private static String data = "test jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihgtest jiojiogeiojigouihg"; //$NON-NLS-1$

    public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException {
    String test = testEncrypt(privateKey,data);
    System.out.println("加密后的的信息:" + test);
    String testDecrypt = testDecrypt(publicKey, test);
    System.out.println("解密后的的信息:"+testDecrypt);

    }


    /**
    * 加密
    * @param key
    * @param data
    * @return
    * @throws NoSuchAlgorithmException
    * @throws InvalidKeySpecException
    * @throws NoSuchPaddingException
    * @throws IllegalBlockSizeException
    * @throws BadPaddingException
    * @throws InvalidKeyException
    * @throws IOException
    */
    public static String testEncrypt(String key,String data) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, IOException{
    byte[] decode = Base64.getDecoder().decode(key);
    PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(decode);
    KeyFactory kf = KeyFactory.getInstance(algorithm);
    PrivateKey generatePrivate = kf.generatePrivate(pkcs8EncodedKeySpec);
    Cipher ci = Cipher.getInstance(algorithm);
    ci.init(Cipher.ENCRYPT_MODE, generatePrivate);

    byte[] bytes = data.getBytes();
    int inputLen = bytes.length;
    int offLen = 0;//偏移量
    int i = 0;
    ByteArrayOutputStream bops = new ByteArrayOutputStream();
    while(inputLen - offLen > 0){
    byte [] cache;
    if(inputLen - offLen > 117){
    cache = ci.doFinal(bytes, offLen,117);
    }else{
    cache = ci.doFinal(bytes, offLen,inputLen - offLen);
    }
    bops.write(cache);
    i++;
    offLen = 117 * i;
    }
    bops.close();
    byte[] encryptedData = bops.toByteArray();
    String encodeToString = Base64.getEncoder().encodeToString(encryptedData);
    return encodeToString;
    }




    /**
    * 解密
    * @param key
    * @param data
    * @return
    * @throws NoSuchAlgorithmException
    * @throws InvalidKeyException
    * @throws NoSuchPaddingException
    * @throws InvalidKeySpecException
    * @throws BadPaddingException
    * @throws IllegalBlockSizeException
    * @throws IOException
    */
    public static String testDecrypt(String key,String data) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, InvalidKeySpecException, IllegalBlockSizeException, BadPaddingException, IOException{
    byte[] decode = Base64.getDecoder().decode(key);
    // PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(decode); //java底层 RSA公钥只支持X509EncodedKeySpec这种格式
    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(decode);
    KeyFactory kf = KeyFactory.getInstance(algorithm);
    PublicKey generatePublic = kf.generatePublic(x509EncodedKeySpec);
    Cipher ci = Cipher.getInstance(algorithm);
    ci.init(Cipher.DECRYPT_MODE,generatePublic);

    byte[] bytes = Base64.getDecoder().decode(data);
    int inputLen = bytes.length;
    int offLen = 0;
    int i = 0;
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    while(inputLen - offLen > 0){
    byte[] cache;
    if(inputLen - offLen > 128){
    cache = ci.doFinal(bytes,offLen,128);
    }else{
    cache = ci.doFinal(bytes,offLen,inputLen - offLen);
    }
    byteArrayOutputStream.write(cache);
    i++;
    offLen = 128 * i;

    }
    byteArrayOutputStream.close();
    byte[] byteArray = byteArrayOutputStream.toByteArray();
    return new String(byteArray);
    }

    }
  • 相关阅读:
    html学习总结
    16--二叉树的镜像
    17-- 从上到下打印二叉树,按层打印。
    14--反转链表
    14--合并两个排序的链表
    15-- 输入两个二叉树A和B,判断B树是否包含于A树。
    13--输入一个整数数组,实现一个函数来调整数组中数字的顺序
    13--输出链表中倒数第k个节点,
    12--打印1到最大的N为数字。
    10--输入一个十进制的整数,转化为二进制,输出有多少个1
  • 原文地址:https://www.cnblogs.com/jabez1992/p/10903238.html
Copyright © 2011-2022 走看看