AES对称加密

AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard),是美国联邦政府采用的一种区块加密标准。为对称加密,加密与解密为同一秘钥。Java实现如下:
1、秘钥的生成,根据一个字符串生成,字符串长度有限制。

   /**
     * 创建密钥
     * @param password 自定义,长度不足自动补0,根据此字符串生成秘钥
     * @return 秘钥
     */
    private SecretKeySpec createKey(String password) {
        byte[] data = null;
        if (password == null) {
            password = "";
        }
        StringBuilder sb = new StringBuilder(32);
        sb.append(password);
        while (sb.length() < 32) {
            sb.append("0");
        }
        if (sb.length() > 32) {
            sb.setLength(32);
        }

        try {
            data = sb.toString().getBytes("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return new SecretKeySpec(data, "AES");
    }

2、加密:

   /**
     * 加密
     *
     * @param encodingString  要加密的字符串
     * @param password        根据此字符串,生成秘钥
     * @return                密文
     */
    private String getAESEncode(String encodingString, String password) {
        String data = null;
        try {
            //1.创建加密引擎
            Cipher cipher = Cipher.getInstance("AES");
            //2.创建key
            SecretKeySpec key = createKey(password);
            //3.密码引擎初始化
            cipher.init(Cipher.ENCRYPT_MODE, key);
            //4.对数据进行加密,数据进行Base64编码
            byte[] rr = Base64.encode(cipher.doFinal(encodingString.getBytes()), Base64.DEFAULT);
            data = new String(rr);

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return data;
    }

3、解密:

   /**
     * 解密
     * @param decodingString    要解密的字符串
     * @param password          生成秘钥的字符串
     * @return                  明文
     */
    private String getDecodeString(String decodingString,String password){
        String data="";
        try {
            //1、创建一个密码引擎
            Cipher cipher = Cipher.getInstance("AES");
            //2、创建key
            SecretKeySpec keySpec = createKey(password);
            //3、对密码引擎进行初始化
            cipher.init(Cipher.DECRYPT_MODE,keySpec);
            //4、对数据进行解密
            byte[] decode = Base64.decode(decodingString, Base64.DEFAULT);
            data= new String(cipher.doFinal(decode));

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }
        return data;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值