keyGenerator和Cipher类实现AES对称加密

public static void symmetricEncrypt(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException,
            IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException, InvalidKeyException {
        //
        // check args and get plaintext
        if (args.length != 1) {
            System.err.println("Usage: java PrivateExample text");
            System.exit(1);
        }
        byte[] plainText = args[0].getBytes("UTF8");
        //
        // get a DES private key
        System.out.println("\nStart generating DES key");
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(256);//128,192,256三者选一
        Key key = keyGen.generateKey();
        System.out.println("Finish generating DES key");
        // save key
        byte[] encoded = key.getEncoded();
        Arrays.asList(encoded).forEach(System.out::println);
        //
        // get a DES cipher object and print the provider
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        System.out.println("\n" + cipher.getProvider().getInfo());
        //
        // encrypt using the key and the plaintext
        System.out.println("\nStart encryption");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] cipherText = cipher.doFinal(plainText);
        System.out.println("Finish encryption: ");
        System.out.println(new String(cipherText, "UTF8"));

        
        byte[] dencoded = encoded;//模拟取出私钥,然后解密加密后的内容
        Key k = new SecretKeySpec(dencoded,"AES");
        // decrypt the ciphertext using the same key
        System.out.println("\nStart decryption");
        Cipher dcipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        dcipher.init(Cipher.DECRYPT_MODE, k);
        byte[] newPlainText = dcipher.doFinal(cipherText);
        System.out.println("Finish decryption: ");
        System.out.println(new String(newPlainText, "UTF8"));

    }

 

posted on 2021-01-19 14:59  wtsgtc  阅读(852)  评论(0编辑  收藏  举报

导航